北大oj百练-1006/4148生理周期

易错点:时间轴的遍历,起点应该为d+1~d+21252,有两个小陷阱,一个是所给的p e i不一定是最先出现的峰值,可以是任意峰值;另一个是最后算出的答案要比d大,不然相减是负数输出不对。

相关知识:欧几里得定理、中国剩余定理

#include
#include 
using namespace std;
int main()
{
	int day,p,e,i,d,max=0,case0=1;
	while(scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF)
	{ 
	if(p==-1)
	break;
	for(int j=d+1;j<d+21253;j++)
	{
		if(((j-p)%23==0)&&((j-e)%28==0)&&((j-i)%33==0))
		{
		printf("Case %d: the next triple peak occurs in %d days.\n",case0,j-d);
		case0++;
		break;
		}
	}
	} 
	return 0;
}

你可能感兴趣的:(北大oj)