poj1006-Biorhythms(中国剩余定理)

一,题意:右上角中文。
二,思路:
  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.\n",l++,n);
13     }
14     return 0;
15 }
View Code

 版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-09-28 08:13  My_Sunshine  阅读(604)  评论(0编辑  收藏  举报