首页 > 试题广场 >

(选做)在海军节开幕式上,有A、B、C三般军舰要同时开始鸣放

[问答题]

(选做)在海军节开幕式上,有ABC三般军舰要同时开始鸣放礼炮各21响。已知A肌每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。

结果应该是52次。
#include <stdio.h>
int main()
{
    int i,j=0,k=0,l=0,sum=0,num[200]={0};
    for(i=0;i<=20;i++)
    {
        num[j]=1;
        j=j+6;
        num[k]=1;
        k=k+7;
        num[l]=1;
        l=l+8;
    }
    for(i=0;i<200;i++)
    {
        if(num[i]==1)
        {
            sum++;
        }
    }
    printf("%d",sum);
    return 0;
}
发表于 2019-09-11 18:35:57 回复(0)
更多回答
哈工大Mooc里面的一个OJ,答案是54。可以先假设有 21 x 3 响,然后根据重复的炮声去减就行了。
#include <stdio.h>
int main()
{
    int n = 21 * 3;
    int i = 5;
    while (i <= 21 * 5) {
        if (i % 5 == 0 && i % 6 == 0) {
            --n;
            if (i % 7 == 0) {
                --n;
            }
            i += 5;
        } else if (i % 5 == 0 && i % 7 == 0) {
            --n;
            i += 5;
        } else if (i % 6 == 0 && i % 7 == 0) {
            --n;
            i += 6;
        } else {
            ++i;
        }
    }

    while (i <= 21 * 6) {
        if (i % 6 == 0 && i % 7 == 0) {
            --n;
            i += 7;
        } else {
            ++i;
        }
    }

    printf("n=%d\n", n);
    return 0;
}

编辑于 2020-03-16 15:31:29 回复(0)