poj 1006 Biorhythms

题目:

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

题意:

人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。

代码:

/*
中国剩余定理
*/
#include<cstdio>
using namespace std;
int p,e,i,d,t,a[4],m[4],ans;
void ty(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return ;
    }
    ty(b,a%b,x,y);
    int tmp=x;
    x=y;
    y=tmp-(a/b)*y;
}
int crt(int a[],int m[],int n)
{
    int mm=1,tot=0,j,k;
    for(j=1;j<=n;j++)
      mm*=m[j];
    for(j=1;j<=n;j++)
    {
        int x,y,mi=mm/m[j];
        ty(mi,m[j],x,y);
        tot=(tot+mi*x*a[j])%mm;
    }
    if(tot<0)
      tot+=mm;
    return tot;
}
int main()
{
    while(~scanf("%d%d%d%d",&p,&e,&i,&d))
    {
        if(p==-1&&e==-1&&i==-1&&d==-1)
          break;
        a[1]=p;
        a[2]=e;
        a[3]=i;
        m[1]=23;
        m[2]=28;
        m[3]=33;
        ans=crt(a,m,3);
        if(ans<=d)
          ans+=21252;
        t++;
        printf("Case %d: the next triple peak occurs in %d days.\n",t,ans-d);        
    }
    return 0;
}

 

posted @ 2017-02-02 08:40  一叶落尽天下秋  阅读(194)  评论(0编辑  收藏  举报