本文主要是介绍POJ 1006解题报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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://blog.csdn.net/ChinaCzy/archive/2010/04/29/5544250.aspx
这篇关于POJ 1006解题报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!