题目链接:http://poj.org/problem?id=1006
题目可能有点饶,简而言之,就是有三个公差分别是23,28,33的等差数列,在给定数列第一项的情况下求出三个数列同时相等时的数是多少,并且这个数要大于给定的第四个输入值,由于这个值可能比前三个数都小,所以我就将这个数先分别对23,28,33取模,得到最小的初值,然后注意特殊值就行了,由于是暴力求解,就不多赘述了
代码:
#include<stdio.h>
int main(){
int p;
int e;
int j;
int d;
int q;
int w;
int r;
int P;
int E;
int J;
int i=1;
while(scanf("%d %d %d %d",&p,&e,&j,&d),p!=-1&&e!=-1&&j!=-1&&d!=-1){
p=p%23;
e=e%28;
j=j%33;
q=0;
w=0;
r=0;
while(1){
P=p+23*q;
E=e+28*w;
J=j+33*r;
if(P==0&&E==0&&J==0);
else if((P==E)&&(P==J)&&P>=d)
break;
if(P<=E&&P<=J)
q++;
else if(E<=P&&E<=J)
w++;
else if(J<=P&&J<=E)
r++;
}
printf("Case %d: the next triple peak occurs in %d days.\n",i++,P-d);
}
return 0;
}