【问题描述】
人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为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(也就是下一个情商个体力高峰时间);
如果是,就输出这个时间(他就是下一个最佳的高峰时间);
本文介绍了一种算法,用于计算人生三大周期(体力、感情、智力)的高峰同步出现的时间。通过逐步查找每个周期的高峰,并确保三者重合,最终确定了下一次三峰同步的日期。
&spm=1001.2101.3001.5002&articleId=78427777&d=1&t=3&u=2c154d08d10c48f2b5f7f227c1e98083)
2740

被折叠的 条评论
为什么被折叠?



