POJ1006生理周期

来源:互联网 发布:郑州知豆电动汽车租赁 编辑:程序博客网 时间:2024/06/09 23:06

问题分析:令所求的时间为X天,则具有如下性质:

1)D < X <= 21252

2)  (X - p) % 23 = 0

3)  (X - e) % 28 = 0

4)  (X - i) % 33 = 0

算法思想:从d + 1开始逐一枚举寻找满足条件2的数字a,从a开始每步加23寻找满足条件3的数字b(这样的b自然也满足条件2),然后再从b开始每步加23 * 28寻找满足条件4的数字X(这样的X同时满足条件2,3)。X就是我们要找的数字,输出时X -  d。

#include <iostream>#include <vector>using namespace std;int main(){    int p, e, i, d;    int no = 1;    int j;    cin >> p >> e >> i >> d;    vector<int> ivec;    while(p != -1 && e != -1 && i != -1  && d != -1)    {        for(j = d + 1; j <= 21252; ++j)        {            if((j - p) % 23 == 0)            break;        }        for(; j <= 21252; j = j + 23)        {            if((j - e) % 28 == 0)            break;        }        for(; j <= 21252;  j = j + 23 * 28)        {            if((j - i) % 33 == 0)            break;        }        ivec.push_back(j - d);        cin >> p >> e >> i >> d;    }    for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)    {        cout << "Case " << no++;        cout << " : the next triple peak occurs in " << *iter << " days." << endl;    }    return 0;}

原创粉丝点击