Poj百练 4148:生理周期 (分类:枚举)

经典的枚举优化问题

//poj4148生理周期
#include <iostream>
#include<cstdio>
using namespace std;

int main()
{
    int p, e, i, d, index = 1;
    scanf("%d%d%d%d",&p,&e,&i,&d);
    while(p!=-1 && e!=-1 && i!=-1 && d!=-1){
        int st = d+1;  //表示开始的天数
        //核心算法
        //先从找到体力高峰开始,每找到一个高峰迭代的大小就变为周期之积
        for(; st < 21252; st++)
            if((st-p)%23 == 0)
                break;
        for(; st < 21252; st+=23)
            if((st-e)%28 == 0)
                break;
        for(; st <21252; st+=23*28)
            if((st-i)%33 == 0)
                break;

        printf("Case %d: the next triple peak occurs in %d days.\n",index, st-d);
        index++;
        scanf("%d%d%d%d",&p,&e,&i,&d);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/81479977
今日推荐