要求用C语言编程解决下面问题:在庆祝活动中,A,B,C三条军舰要同时开始鸣放礼炮各21响

在庆祝活动中,A,B,C三条军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间掌握非常准确,请编程计算观众总共听到的礼炮声数。

和你说下思路吧。
---------------------------------------------
因为C舰要7秒放一次,所以最后一响一定是C舰的。即最后一响是在第140秒。
所以开一个大小超过140的数组并将所有内容初始化为0,然后分别隔5、6、7编号对数组的对应内容进行+1操作。
三次遍历之后,第四次遍历统计不为0的元素个数,然后输出就OK
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-21

利用最小公倍数能够求出重叠的炮声,然后用总的炮声减去即可。

具体代码如下:

#include <stdio.h>
#include<stdlib.h>
#include<math.h>

int Lcm ( int a, int b );

 main()
{
int st;  //重叠的炮声

st=5*21/Lcm(5,6)+6*21/Lcm(6,7)+5*21/Lcm(5,7);
printf("n=%d",21*3-st);

system("pause");
 }

 //函数功能:输出两个数的最小公倍数
 int Lcm ( int a, int b )
 {
int i;
for (i= a; i<=a*b ; i++ )
{
if ( i % a == 0 && i % b ==0 )
break;
}
return i;
 }

第2个回答  2018-11-27
#include<stdio.h>
main()
{
int i,j,k,t,one=0,count=0;

for(t=0;t<=7*20;t++)
{
if(t<=5*20) {i=!(t%5);}else i=0;
if(t<=6*20) {j=!(t%6);}else j=0;
if(t<=7*20) k=!(t%7);
if(i&&j&&k)
{
one+=2;
count++;
}else if((i&&k)||(i&&j)||(j&&k))
{
one++;
count++;
}else if(i||j||k)
{
count++;
}else
{
;
}
}

printf("淹没的次数%d 听到的次数%d\n",one,count);
}
第3个回答  2013-01-06
最直接而又最有效的方法

/************************************************************

// CJ_Studio
// 2013/1/6
tangram_guid_1357448614999
**************************************************************/
#include <stdio.h>

#define N 21

int main()
{
int A[N],B[N],C[N],S[3*N],i,j,sn=N,snb;
for(i=0;i<N;i++)
{
S[i]=A[i]=5*i;
B[i]=6*i;
C[i]=7*i;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(B[i]==S[j])break;
}
if(j==N){S[j]=B[i];sn++;}
}
snb=sn;
for(i=0;i<N;i++)
{
for(j=0;j<snb;j++)
{
if(C[i]==S[j])break;
}
if(j==snb){S[j]=C[i];sn++;}
}
printf("%d\n",sn);
return 0;
}本回答被提问者采纳
第4个回答  2013-01-06
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
const int a = 5 ,b = 6, c = 7;
int array[60],temp;
int count = 61;
for(int i = 1 ; i < 21 ; i++){
array[3 * i - 3] = a * i;
array[3 * i - 2] = b * i;
array[3 * i - 1] = c * i;
}
for(int i = 0 ; i < 59 ; i++){
temp = array[i];
for(int j = i + 1 ; j < 60 ; j++){
if(temp == array[j]){
printf("%d\t%d\t%d\n",i,j,temp);
count--;
break;
}
}
}
printf("共响礼炮 %d 声",count);
system("PAUSE");
return 0;
}本回答被网友采纳
相似回答