枚举—案例(生理周期poj1006)

本文介绍了一种算法,用于计算人生三大周期(体力、感情、智力)的高峰同步出现的时间。通过逐步查找每个周期的高峰,并确保三者重合,最终确定了下一次三峰同步的日期。

【问题描述】

     人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。输入有多组数据,以一行-1结束。

【样例输入】

    0 0 0 0

    0 0 0 100

    5 20 34 325

    4 5 6 7

    283 102 23 320

    203 301 203 40

    -1 -1 -1 -1

【样例输出】

    Case 1: the next triple peak occurs in 21252 days.

    Case 2: the next triple peak occurs in 21152 days.

    Case 3: the next triple peak occurs in 19575 days.

    Case 4: the next triple peak occurs in 16994 days.

    Case 5: the next triple peak occurs in 8910 days.

    Case 6: the next triple peak occurs in 10789 days.



问题分析:



 1.首先在第d+1天开始找到下一个出现的体力高峰是第几天;
 2.然后在这个体力高峰出现的时间中找这一天是不是出现情商高峰时间;
 3.接着又在这个情商高峰出现的时间找这一天是不是出现智商高峰的时间;
 如果是,就输出;
 假设输入0 0 0 0 
 先计算出下一个体力高峰时间是23;
 在判断这个高峰时间是不是情商高峰时间;不是就将体力高峰时间增加23(也就是下一个体力高峰时间)
 如果是情商高峰时间(说明也是体力高峰时间);
 也是先判断是不是智商高峰时间;不是就将智商个体力高峰时间增加23*28(也就是下一个情商个体力高峰时间);
 如果是,就输出这个时间(他就是下一个最佳的高峰时间);


#include <iostream>


using namespace std;


int main()
{
    long a = 0;
    int p,e,i,d;
    int num = 1;
    while(cin>>p>>e>>i>>d&&p!=-1){//当输入-1时候退出计算;

        if((p<=365&&p>=0)&&(e<=365&&e>=0)&&(i<=365&&i>=0)&&(d<=365&&d>=0)){
            for(a = d+1;(a-p)%23;a++);//找到体力高峰时间
            for(;(a-e)%28;a +=23);//找到情商高峰时间
            for(;(a-i)%33;a +=28*23);//找到智商也出现的时间;
            cout <<"Case "<<num<<": the next triple peak occurs in "<<a-d<<" days."<<endl;
            num++;
        }
        else
            continue;
    }
}










 1.首先在第d+1天开始找到下一个出现的体力高峰是第几天;
 2.然后在这个体力高峰出现的时间中找这一天是不是出现情商高峰时间;
 3.接着又在这个情商高峰出现的时间找这一天是不是出现智商高峰的时间;
 如果是,就输出;
 假设输入0 0 0 0 
 先计算出下一个体力高峰时间是23;
 在判断这个高峰时间是不是情商高峰时间;不是就将体力高峰时间增加23(也就是下一个体力高峰时间)
 如果是情商高峰时间(说明也是体力高峰时间);
 也是先判断是不是智商高峰时间;不是就将智商个体力高峰时间增加23*28(也就是下一个情商个体力高峰时间);
 如果是,就输出这个时间(他就是下一个最佳的高峰时间);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值