一,题意:右上角中文。
二,思路:
1,由题意得出方程组
2,利用中国剩余定理求解
3,求出最小正整数
三,步骤:
1,由题意得出方程组
(n+d) % 23 = p ;
(n+d) % 28 = e ;
(n+d) % 33 = i ;
2,中国剩余定理求解
i,从23和28的公倍数中找出x,且满足x%33 = 1 ,x=1288
ii,从23和33的公倍数中找出y,且满足y%28 = 1 ,y=14421
iii,从28和33的公倍数中找出z,且满足z%23 = 1 ,z=5544
iiii,s = (n+d) = (5544*p+14421*e+1288*i) % lcm(23,28,33); lcm为最小公倍数 =21252;
3, 求最小正整数解
i,防止n为负数:n=(n+21252)%21252
注意当n=0时,结果输出21252。
1 #include<iostream> 2 using namespace std; 3 4 int main(){ 5 int p,e,i,d,n,s,l=1; 6 while(cin>>p>>e>>i>>d){ 7 if(p==-1&&e==-1&&i==-1&&d==-1)break; 8 int n=(5544*p+14421*e+1288*i)%21252-d; 9 n= (n+21252)%21252; //防止 s 是负数 10 if(n==0) 11 n=21252; 12 printf("Case %d: the next triple peak occurs in %d days. ",l++,n); 13 } 14 return 0; 15 }
版权声明:本文为博主原创文章,未经博主允许不得转载。