本文共 738 字,大约阅读时间需要 2 分钟。
1003,1004,1005过于水,就不记录代码了。1006也非常简单,就是一个解不定方程的问题,只是由于问题描述得不清楚或是由于中午没睡觉现在脑子比较晕的缘故,题目看了好几遍都没明白数据的含义是什么,看了几遍中文翻译才弄懂。
#include <iostream>
using namespace std;
int main()
{
int p,e,i,d;
int start,day;
int count=1;
while(true)
{
cin>>p>>e>>i>>d;
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
p=p%23,e=e%28,i=i%33;
if(d<p)
start=0;
else
start=(d-p)/23+1;//这里都要加1,指的是给定的日期之后(不包括给定日期)
for(int ix=start;;++ix)
{
day=p+23*ix;
if(day<e||day<i)
continue;
if(day-d>21252)
{
cout<<"Case "<<count++<<": the next triple peak occurs in "<<21252<<" days."<<endl;
break;
}
else if((day-e)%28==0&&(day-i)%33==0)
{
cout<<"Case "<<count++<<": the next triple peak occurs in "<<day-d<<" days."<<endl;
break;
}
}
}
return 0;
}
这道题需要总结的地方是如果应用中国剩余定理,会在O(1)的时间内算出来,非常强大。具体见
转载地址:http://vtxli.baihongyu.com/