首页 > 代码库 > poj 1006 Biorhythms
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;}
poj 1006 Biorhythms
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。