`
only_xxp
  • 浏览: 13487 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

pku1006

阅读更多

简单题, 迭代减d求余即可, 注意for的最大为21252+d

 

#include <iostream>
using namespace std;

int main()
{
    int p, e, i, d;
    int days[100000];
    int j=0;
    int day;
    while(1){
        cin>>p>>e>>i>>d;
        if(p==-1 && e==-1 && i==-1 && d==-1){
             break;
        }   
        p = p%23;
        e = e%28;
        i = i%33; 
        days[j] = 21252;     
        for(day = d+1; day<21252+d; day++){
             if(day%23==p && day%28==e && day%33==i){
                  days[j] = day - d;
                  break;
             }       
        }       
        j++;  
    }
    for(int t = 0; t<j ; t++){
        cout<<"Case "<<t+1<<": the next triple peak occurs in "<<days[t]<<" days."<<endl;        
    }
    system("pause");
    return 0;
}

 

 

 

上面是最傻的算法, 其实这是一道剩余定理题 

http://www.hudong.com/wiki/%E4%B8%AD%E5%9B%BD%E5%89%A9%E4%BD%99%E5%AE%9A%E7%90%86#

 

如果使用剩余定理求解, 见这位高手的博客

http://www.cppblog.com/AClayton/archive/2007/09/14/32186.html

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics