POJ1006 Biorhythms【中国剩余定理】
发布时间:2020-12-14 03:18:57 所属栏目:大数据 来源:网络整理
导读:题目链接 ? 题目大意: 人体的体力每23天会达到峰值,情感每28天会达到峰值,智力每33天会达到峰值,一个人在a天体力达到峰值,b天情感达到峰值,c天智力达到峰值,求这个人下一次体力情感智力均达到峰值的天数减去d。 ? #include iostream using namespace st
<题目链接> ? 题目大意: 人体的体力每23天会达到峰值,情感每28天会达到峰值,智力每33天会达到峰值,一个人在a天体力达到峰值,b天情感达到峰值,c天智力达到峰值,求这个人下一次体力情感智力均达到峰值的天数减去d。 ? #include <iostream> using namespace std; int Extended_Euclid(int a,int b,int &x,int &y) { int d; if(b==0) { x=1;y=0; return a; } d=Extended_Euclid(b,a%b,y,x); y-=a/b*x; return d; } int Chinese_Remainder(int a[],int w[],int num) { int i,d,x,m,lcm,ret; ret=0; lcm=1; for (i=0;i<num;i++) lcm*=w[i]; for (i=0;i<num;i++) { m=lcm/w[i]; d=Extended_Euclid(w[i],y); ret=(ret+y*m*a[i])%lcm; } return (lcm+ret%lcm)%lcm; } int main() { int n,i,c,C=1,ans; int w[15]={23,28,33},a[15]; while (scanf("%d %d %d %d",&a[0],&a[1],&a[2],&d)!=EOF) { if(a[1]==-1&&a[2]==-1&&a[0]==-1) break; a[0]%=23; a[1]%=28; a[2]%=33; int lcm=33*28*23; ans=Chinese_Remainder(a,w,3); ans=ans-d; if(ans<=0) ans=ans+lcm; printf("Case %d: the next triple peak occurs in %d days.n",C++,ans); } return 0; } ? ? 2018-07-31 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |