题解:http://blog.csdn.net/lyy289065406/article/details/6648551
刚开始学中国剩余定理,感觉这个讲的挺好
我是套的黑书里的的中国剩余定理的模板
#include <iostream>
#include <algorithm>
using namespace std;
int m[3] = {23,28,33};
int a[3];
int extend_gcd(int a,int b,int &x,int &y)
{
if(a==0&&b==0) return -1;
if(b==0)
{
x=1;
y=0;
return a;
}
int d=extend_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
int t,d,time = 0,M,res,mi,pi,qi;
M = m[0]*m[1]*m[2];
cin >> t;
while(cin >> a[0] >> a[1] >> a[2] >> d && a[0] != -1)
{
res = 0;
for(int i = 0; i < 3; ++i)
{
mi = M/m[i];
extend_gcd(mi,m[i],pi,qi);
res = (res+mi*pi*a[i])%M;
}
res -= d;
if(res <= 0)
res = res + M;
cout << "Case " << ++time << ": the next triple peak occurs in " << res << " days." << endl;
}
return 0;
}