忽然想起poj有些题有中文的= =之前忘了,这个题有中文就不说题意了,做法也很简单,直接跑循环等到全都归零了就输出天数就行了,要注意一下给的天数会超过循环的天数,先取余处理一下,然后还要注意最后,可能会出现天数超过范围的情况出现负数。
下面AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int abs(int a)
{
if(a>=0)
return a;
return -a;
}
int main()
{
int p,e,i,d;
int k=0;
int j;
int t;
while(scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF)
{
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
k++;
p=p%23;
e=e%28;
i=i%33;
p=abs(23-p);
e=abs(28-e);
i=abs(33-i);
p=p%23;
e=e%28;
i=i%33;
for(j=0;;j++)
{
p++;
e++;
i++;
if(p==23)
p=0;
if(e==28)
e=0;
if(i==33)
i=0;
if(p==0&&e==0&&i==0)
break;
}
t=j+1-d;
if(t<=0)
t=21252+t;
cout<<"Case "<<k<<": the next triple peak occurs in "<<t<<" days."<<endl;
}
return 0;
}