具体代码如下:
#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求差即可得出结果
我给你写的是个思路,求两两相同的时候要求三次!!
你看看能不能用吧,我也没试,不过应该是可以的!