poj2977:生理周期
参考案例
0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
// 21252
// 21152
// 19575
// 16994
// 8910
// 10789
解法①
当输入时就有a == b == c时,相当于输出a,b,c三个数的最小公倍数
可以lcm(lcm(a,b),lcm(a,c)) (两两lcm)
#include<iostream>
using namespace std;
int a,b,c,d;
int main()
{
cin>>a>>b>>c>>d;
if(a==b&&b==c)//特判,如果一开始三个日期就重合,不会进入while循环,此时手动将a+23;
a+=23;
while(a!=b||b!=c)
{
if(a<b) a+=23;
if(b<c) b+=28;
if(c<a) c+=33;
}
printf("%d",a-d);
}
解法②
注意循环for中的条件
#include<iostream>
using namespace std;
int a,b,c,d;
int main()
{
cin>>a>>b>>c>>d;
for(int i=d+1;i<=d+21252;i++)
if((i-a)%23==0)
if((i-b)%28==0)
if((i-c)%33==0)
{
printf("%d",i-d);
return 0;
}
}