北大ACM训练题(1006--Biorhythms)

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

猜你喜欢

转载自blog.csdn.net/sifangege/article/details/80160282