C语言习题——礼炮响声次数

一、题目 及 原题链接:c语言练习题

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

二、解题过程

最开始的思路是:各礼炮次数范围内,整除其他礼炮时的声音会被覆盖,所以假设5秒礼炮全能听见,再加上六秒和七秒礼炮的未覆盖次数。结果计算为:52次。
错误原因:当6秒礼炮响第20次,7秒礼炮响第二十次时,5秒礼炮已响完却仍被减去了qwq。
二改后的思路:按各礼炮时间范围内进行循环,也就是跟所给链接相同的解法。(好吧,虽说最后的程序和所给答案一毛一样,俺也确实瞄了下思路……但程序倒的确是自己寻思的!)(试图解释)
答案The sum of the numbers heard is 54

三、正确程序

#include
int main()
{
 int sum,i;
 sum=0;
 for(i=0;i<21*7;i++)
 {
  if(i%5==0&&i<=21*5)
  {
   sum++;
   continue;
  }         /*时间内5秒礼炮次数*/
  if(i%6==0&&i<=21*6)
  {
   sum++;
   continue;
  }        /*时间内6秒礼炮次数*/
  if(i%7==0)
  {
   sum++;
  }       /*时间内7秒礼炮次数*/
 }
 printf("The sum of the numbers heard is %d\n",sum);
 return 0;
}
注:错误的程序!
#include
int main()
{
 int sum,i;
 sum=21;    /*设5秒礼炮全能听见*/
 i=0;
    do
 {
  i++;
  if(i%5==0||i%7==0)
   continue;
  sum++;
 }while(i<21);       /*6秒礼炮没被覆盖*/
 i=0;
 do
 {
  i++;
  if(i%5==0)
   continue;
  sum++;
 }while(i<21);       /*7秒礼炮没被覆盖*/
 printf("The sum of the number heard is %d\n",sum);
 return 0;
}

你可能感兴趣的:(C语言习题——礼炮响声次数)