Description
Since the three cycles have different periods, the peaks of the three cycles generally occur at different times. We would like to determine when a triple peak occurs (the peaks of all three cycles occur in the same day) for any person. For each cycle, you will be given the number of days from the beginning of the current year at which one of its peaks (not necessarily the first) occurs. You will also be given a date expressed as the number of days from the beginning of the current year. You task is to determine the number of days from the given date to the next triple peak. The given date is not counted. For example, if the given date is 10 and the next triple peak occurs on day 12, the answer is 2, not 3. If a triple peak occurs on the given date, you should give the number of days to the next occurrence of a triple peak.
Input
Output
Case 1: the next triple peak occurs in 1234 days.
Use the plural form ``days'' even if the answer is 1.
Sample Input
0 0 0 0 0 0 0 100 5 20 34 325 4 5 6 7 283 102 23 320 203 301 203 40 -1 -1 -1 -1
Sample Output
Case 1: the next triple peak occurs in 21252 days. Case 2: the next triple peak occurs in 21152 days. Case 3: the next triple peak occurs in 19575 days. Case 4: the next triple peak occurs in 16994 days. Case 5: the next triple peak occurs in 8910 days. Case 6: the next triple peak occurs in 10789 days.
题目意思:
描述:
有些人认为,一个人从他/她出生开始,生命中有三个周期。这三个周期是身体,情绪和智力周期,他们的周期长度分别为23,28和33天。在每一个周期中都有一个高峰。在一个周期的高峰,一个人在相应的领域(身体,情绪或精神)的表现最好。举例来说,如果它是心理曲线,思维过程将更为剧烈,更容易专心。
由于不同时期有三个周期,三个周期的高峰一般出现在不同的时间。我们要确定任何人在什么时候出现三重峰(所有三个周期的峰值出现在同一天)。对于每一个周期,你将获得从当前年份其哪些峰(不一定是第一个)一开始出现的天数。你还将得到一个从当年开头的日期的天数数字表示。你的任务是确定的天数从给定的日期到下一个三高峰。给定的日期是不计算在内的。例如,如果给定的日期是10,下一个三重峰在第12天出现,答案是2,不是3。如果一个三重峰在给定的日期时,你应该给的天数到下一个出现的三重峰。这个问题包含多个测试案例!是多输入的第一行是一个整数N,随后有N个输入。每个输入按说明中指出的格式输入。每个输入占一行。有N个输出。每个输出占一行。
输入:
你会得到一个案例。每个案例的输入包括一个四个整数的p,e,i和d。该值p,e和i是距离今年开始的在生理,情绪和智力周期的高峰期的天数。d是给定的日期,可能会比p,e或者i小。所有的值都是非负,最多365,你可以假设一个三重高峰将出现在给定日期的21252天。当p = e= i = d = -1时结束输入。
输出:
对于每一个测试案例,输出到下一个三重峰的天数:输出案例一:未来三重高峰出现在1234天。使用复数形式输出天数,即使天数是1。
解题思路:
本题是中国剩余定理得题型,按中国剩余定理得理解就是一个数sum除23余p,除28余e,除33余i。求这个数与d的差值,注意差值不能为0。
代码如下:C/C++代码
//中国剩余定理
#include<stdio.h>
int main()
{
int p,e,i,d,k,sum,num=1;
while(scanf("%d%d%d%d",&p,&e,&i,&d))
{
/*判断输入结束的方法,因为p,e,i,d都不小于0
因此当p=e=i=d=-1时,p+e+i+d一定等于-4*/
if(p+e+i+d==-4)
break;
/*1288是23和28的公倍数,并且1288%33=1;
5544是28和33的公倍数,并且5544%23=1;
14421是23和33的公倍数,并且14421%28=1;
选择余1,是为了转换成输入的余数,只需乘以输入的数即可*/
sum=(1288*(i)+5544*(p)+14421*(e))%(21252);
if(sum>d)
printf("Case %d: the next triple peak occurs in %d days.\n",num++,sum-d);
else
printf("Case %d: the next triple peak occurs in %d days.\n",num++,21252+sum-d);
}
return 0;
}