生理周期

人 有 体 力 、 情 商 、 智 商 的 高 峰 日 子 , 它 们 分 别 每 隔 
23 天 、 28 天 和 33 天 出 现 一 次 。 对 于 每 个 人 , 我 们 想
知 道 何 时 三 个 高 峰 落 在 同 一 天 。 给 定 三 个 高 峰 出 现
的 日 子 p, e 和 i ( 不 一 定 是 第 一 次 高 峰 出 现 的 日 子 )
再 给 定 另 一 个 指 定 的 日 子 d , 你 的 任 务 是 输 出 日 子 d
之 后 , 下 一 次 三 个 高 峰 落 在 同 一 天 的 日 子 ( 用 距 离 d
的 天 数 表 示 ) 。 例 如 : 给 定 日 子 为 10 , 下 次 出 现 三
个 高 峰 同 一 天 的 日 子 是 12 , 则 输 出 2 。
#include <bits/stdc++.h>
using namespace std;
int main()
{
	//这个代码的精髓之处在于 巧妙的枚举,把不用的枚举跳过了。 
	//p,i,e,d,k	:	体力、情商、智商、给定的日志、天数 
	int p=0,i=0,e=0,d=0,k=0;
	cin>>p>>e>>i>>d;
	//循环增加天数 保证k-p(在给点日期之后) 是体力高峰 
	for(k=(d+1);(k-p)%23;k++);
	//k已经是体力高峰 现在保证k不仅是体力高峰还是情商高峰 
	for(;(k-e)%28;k+=23);
	//又保证了k是智商高峰(k+=23*28) 
	for(;(k-i)%33;k+=23*28);
	cout<<k-d;
}

类似文章