poj1006 Biorhythms

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int x,y;
int extended_gcd(int a,int b)
{
    int t,gcd;
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    gcd=extended_gcd(b,a%b);
    t=x;
    x=y;
    y=t-a/b*y;
    return gcd;
}
int main()
{
    int a[3],d;
    int i;
    int m[3]={23,28,33};
    int M;
    int w;
    int res;
    int k=1;
    while(1)
    {
        M=1;
        res=0;
        scanf("%d %d %d %d",&a[0],&a[1],&a[2],&d);
        if(a[0]==-1&&a[1]==-1&&a[2]==-1&&d==-1)
        {
            break;
        }
        for(i=0;i<3;i++)
        {
            a[i]=a[i]%m[i];
        }
        for(i=0;i<3;i++)
        {
            M*=m[i];
        }
        for(i=0;i<3;i++)
        {
            w=M/m[i];
            extended_gcd(m[i],w);
            res=(res+a[i]*y*w)%M;
        }
        while(res-d<=0)
        {
            res+=M;
        }
        printf("Case %d: the next triple peak occurs in %d days.\n",k++,res-d);
    }
    return 0;
}

posted @ 2012-07-12 08:43  willzhang  阅读(191)  评论(0编辑  收藏  举报