有大小两寺敲晨钟,报时警示时光匆,约定晨时同起声,大寺三分敲一下,小寺四时应一声,大小各敲十二通,一人居在两寺中,可闻多少晨钟声。
上面故事的意思是:有大小两座寺院敲晨钟用来报时,并且两座寺院都是在晨时开始敲钟。大寺院每3分钟敲一下,小寺院每4分钟敲一下,两座寺院各敲12下,居住在两座寺院中间的人能听到多少声钟声?答案很简单,21次。
这个题目太简单了,我们现在想弄个复杂点的。三个寺庙呈品字形排列,一个人站在三个寺庙连成的三角形的中心,离三个寺庙的距离相等。三个寺庙同时从0点开始敲钟,但是和尚每天的规律都不同,如果告诉你每个寺庙每天的敲钟间隔,以及敲钟的总数,你能知道站在中间的人总共能听到多少声钟声吗?
输入格式:
输入在一行中给出4个绝对值不超过1000的整数A,B,C,N,分别代表三个寺庙敲钟的间隔,N则是每个寺庙敲钟的次数。
输出格式:
对每一组输入,在一行中输出站在中间的人听到的钟声次数。
输入样例:
在这里给出一组输入。例如:
3 4 5 3
输出样例:
在这里给出相应的输出。例如:
7
解题思路:1000内的数跑循环每次把和这个数没有余数的数标记为1然后次数++次数等于d的时候退出循环最后便利输出1的个数就可以了。
#include <bits/stdc++.h>
using namespace std;
int s[1010]={0};
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
int sum=0;
for(int i=0;i<=1000;i++){
if(i%a==0){
s[i]=1;
sum++;
if(sum==d)break;
}
}
for(int i=0;i<=1000;i++){
if(i%b==0){
s[i]=1;
sum++;
if(sum==d*2)break;
}
}
for(int i=0;i<=1000;i++){
if(i%c==0){
s[i]=1;
sum++;
if(sum==d*3)break;
}
}
int ans=0;
for(int i=0;i<=1000;i++){
if(s[i]==1){
ans++;
}
}
cout<<ans<<endl;
return 0;
}