本文主要是介绍【HDU】 1370 Biorhythms,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Biorhythms
题目链接
- Biorhythms
题目大意
题目给了三个周期,现在要求最近的一天同时%这3个周期等于p,e,i 。
题解
根据题意,现在有三个式子
X≡p(mod 23)X≡e(mod 28)X≡i(mod 33)
用中国剩余定理求一个最小的X即可。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>using namespace std;int p,e,ii,d,T,m[3]={23,28,33},a[3];int extend_gcd(int a,int b,int &x,int &y)
{int t,ans;if (b==0){x=1; y=0;return a;}else ans=extend_gcd(b,a%b,x,y);t=x;x=y;y=t-(a/b)*y;return ans;
}int chinese_reminder()
{int n=1,ans=0,x,y;for (int i=0;i<3;i++) n*=m[i];for (int i=0;i<3;i++){extend_gcd(n/m[i],m[i],x,y);ans+=(a[i]*x*(n/m[i]));}ans=(ans+n)%n;return ans;
}int main()
{int ans;scanf("%d",&T);int Case=1;while(scanf("%d%d%d%d",&a[0],&a[1],&a[2],&d),a[0]!=-1||a[1]!=-1||a[2]!=-1||d!=-1){printf("Case %d: the next triple peak occurs in ",Case++);ans=chinese_reminder();if (d>=ans) printf("%d days.\n",21252-d+ans);else printf("%d days.\n",ans-d);}return 0;
}
这篇关于【HDU】 1370 Biorhythms的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!