c语言 海军鸣炮

Python048

c语言 海军鸣炮,第1张

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

具体代码如下:

#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

 }

和你说下思路吧。

---------------------------------------------

因为C舰要7秒放一次,所以最后一响一定是C舰的。即最后一响是在第140秒。

所以开一个大小超过140的数组并将所有内容初始化为0,然后分别隔5、6、7编号对数组的对应内容进行+1操作。

三次遍历之后,第四次遍历统计不为0的元素个数,然后输出就OK

//先用下边这个循环找出两两相同时间来,m为时间相同时的计数

int m = 0

for(int i = 0i <ni++){

int sumA = a * i

for(int j = 0j <nj++){

int sumB = b * j

if(sumA == sumB){

m++

}

}

}

//然后再找出三个的时间都相同的个数,这个同理上边的方法,写一个三层的循环就可以了

int n = 0

for( int i = 0i <ni++){

int sumA = a*i

for(int j = 0j <nj ++){

int sumB = b * j

for(int k = 0k <nk++ ){

int sumC = c * k

if(sumA==sum&&sumB==sumC){

n++

}

}

}

}

//最后再把所有相同的检查一遍 不要有重复的,然后与3n求差即可得出结果

我给你写的是个思路,求两两相同的时候要求三次!!

你看看能不能用吧,我也没试,不过应该是可以的!