用数组来解决看似很复杂的礼炮问题

  此次的问题为:有三门大炮A、B、C同是开炮,A每隔五秒开一发,B每隔六秒开一发,C每隔七秒开一发,每门炮有21发炮弹。现有一观众在现场,问他一共能听到几声炮响。

面对这道题我没一般想到用三个数组来保存每门炮响的时刻,然后去除重复响的次数最终剩下的就为听到的次数。

现提供一种思路,只用一个数组且只遍历一次就将结果得出。

代码为:

# include<stdio.h>
void main()
{
 int arr[174]={0};
 for(int i=0;i<21;i++)
 {
  arr[5*i]=1;
  arr[6*i]=1;
  arr[7*i]=1;
 }
 int count=0;
 for(int i=0;i<147;i++)
 {
  if(arr[i]==1)
  {
   count++;
  }
 }
 ("%d\n",count);
}

代码很简单,但思路却很巧妙。定义一个为总的开炮所需时间长度的数组(此时不考虑重复)元素初始化为0,然后将每门大炮发出响声时的时刻所对应的数组元素值赋为1,最后将不为零的元素输出,用count记下个数,最后count就为听到炮响的次数。

猜你喜欢

转载自blog.csdn.net/magic_world_wow/article/details/79253282