题目链接:http://poj.org/problem?id=1006&lang=zh-CN&change=true此处有中文翻译
我们oj地址为http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1234
题目给定三个周期的长度分别为23,28,33 ,p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,设下一次同时出现三个高峰期的距离时间为n的话,则可以的得到:
(n+d)%23=p,(n+d)%28=e,(n+d)%33=i;看了一下中国余数定理,我们可以使(28*33*x)%23=1,x=8,28*33*8=5544;
(23*33*y)%28=1,y=19,23*33*19=14421,(23*28*z)%33=1,z=2,23*28*2=1288;
则(n+d)=(5544*p+14421*e+1288*i)%lcm(23,28,33);
下面就可以求了。。
code:
#include <stdio.h>
int main()
{
int cases=1;
int p,e,i,d,n;
while(scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF)
{
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
printf("Case %d: the next triple peak occurs in ",cases++);
n=(5544*p+14421*e+1288*i-d+23*28*33)%(23*28*33);
printf("%d days.\n",n==0?21252:n);
}
return 0;
}
菜鸟之作,仅供参考,如有错误,请您指出——Tamara 
 

发表评论

电子邮件地址不会被公开。

Post Navigation