POJ1006:Biorhythms——题解

http://poj.org/problem?id=1006

题目大意:

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。

 

中国剩余定理,具体是什么百度去。

#include<cstdio>
#include<cctype>
#include<iostream>
using namespace std;
int main(){
    int r1,r2,r3,r;
    int i;  
    for(i=1,r1=28*33;;i++)  
        if(r1*i%23==1)break;  
    r1*=i;  
    for(i=1,r2=23*33;;i++)  
        if(r2*i%28==1)break;  
    r2*=i;  
    for(i=1,r3=23*28;;i++)  
        if(r3*i%33==1)break;  
    r3*=i;  
    r=23*28*33;  
    int p,e,k;
    int cnt=0;
    while(cin>>p>>e>>i>>k){
    if(p==e&&e==i&&i==k&&p==-1)return 0;
    cnt++;
    int sum=(r1*p+r2*e+r3*i-k)%r;
    sum=(sum+r-1)%r+1;
    printf("Case %d: the next triple peak occurs in %d days.\n",cnt,sum);  
    }
    return 0;
}

 

posted @ 2017-11-27 16:41  luyouqi233  阅读(285)  评论(0编辑  收藏  举报