poj2977:生理周期

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;
					}
	
}
上一篇:Problem 5: Smallest multiple


下一篇:消减整数【lcm】