此次的问题为:有三门大炮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就为听到炮响的次数。