题目链接:http://poj.org/problem?id=1006&lang=default&change=true
题目分析:
输入四个整数,即题目中所说的生理周期的三个时间(这里的时间都是距离本年第一天的天数)和开始计算日期的时间。
通过中国剩余算法计算求得时间。求得公式为:
days = (5544 * p + 14421 * e + 1288 * i - d + 21252) % 21252; //中国剩余算法
注:中国剩余算法很简单,可以上网找一下推导过程。
最后虽然题目很简单,但是要注意特殊数据的输出测试,因为这个WA就不值得了。
源代码:
#include <iostream>
using namespace std;
int main()
{
int p = 0, e = 0, i = 0, d = 0;
int num = 1; //次数
int days; //所求的距离给定的天数
while (cin>>p>>e>>i>>d)
{
if (p != -1 && e != -1 && i != -1 && d != -1)
{
days = (5544 * p + 14421 * e + 1288 * i - d + 21252) % 21252; //中国剩余算法
if (days == 0)
{
days = 21252;
}
cout<<"Case "<<num++<<": the next triple peak occurs in "<<days<<" days."<<endl;
}
else
{
break;
}
}
system("pause");
return 0;
}