题目链接: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; }