2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 生理周期(枚举)

生理周期(枚举)

时间:2024-02-21 00:24:47

相关推荐

生理周期(枚举)

描述

人生来就有三个生理周期,分别为体力周期、感情周期和智力周期,它们的周期长度分别为23天、28天和33天。

每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。

因为三个周期的长度不同,所以通常三个周期的高峰不会落在同一天。

对于每个人,想知道何时三个高峰落在同一天。

对于每个周期,会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。

给定一个从当年第一天开始的天数,你的任务是输出从给定时间开始(不包括给定时间),下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同一天的时间是12,则输出2(注意这里不是3)。

输入

输入包含多组数据,每一组数据由四个整数组成,数据以-1 -1 -1 -1 结束。

对于四个整数p, e, i和d,p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d是给定的时间,可能小于p, e或i。所有给定时间是非负的并且小于或等于365,所求的时间小于或等于21252。

输出

从给定时间起,下一次三个高峰同一天的时间(距离给定时间的天数)。

样例输入

0 0 0 00 0 0 1005 20 34 3254 5 6 7283 102 23 33 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.

#include <iostream>#include <vector>#include <cmath>using namespace std;int main() {int p, e, i;// 我身上搞三个指标p e i,每隔一段时间高峰一次,求哪一天三个指标都高峰了int d; //指定日期int cnt = 1;//23 28 33while (cin >> p >> e >> i >> d) {if (p == -1 && e == -1 && i == -1 && d == -1) {return 0;}/*假设日子是k(遍历k: d+1 ~ 21252),三高峰出现的时机:(k - p) % 23 == 0 // 距离上一次高峰23天,所以今天k是p指标高峰(k - e) % 28 == 0 // 距离上一次高峰28天,所以今天k是e指标高峰(k - i) % 33 == 0 // 距离上一次高峰33天,所以今天k是i指标高峰*/int k;for (k = d + 1; (k - p) % 23 != 0; k ++); // 让k赋值了第一个p高峰for (; (k - e) % 28 != 0; k += 23); // 这时候k是双高峰for (; (k - i) % 33 != 0; k += 23 * 28); // 23 28的最小公倍数:23 * 28printf("Case %d: the next triple peak occurs in %d days.\n", cnt++, k - d);}return 0;}

/* 不知道为什么,这个就是wa!*/#include <iostream>#include <vector>#include <cmath>using namespace std;int main() {int r1, r2, r3;// r1 r2 r3 23 28 33int d;//给定时间int cnt = 1;while(cin >> r1 >> r2 >> r3 >> d) {if (r1 == -1 && r2 == -1 && r3 == -1 && d == -1) {return 0;}bool rq1[21253] = {0};// 0 - 21252bool rq2[21253] = {0};// 0 - 21252bool rq3[21253] = {0};// 0 - 21252for (int i = r1; i <= 21252; i += 23) {rq1[i] = 1;}for (int i = r2; i <= 21252; i += 28) {rq2[i] = 1;}for (int i = r3; i <= 21252; i += 33) {rq3[i] = 1;}for (int i = r1; i >= 0; i -= 23) {rq1[i] = 1;}for (int i = r2; i >= 0; i -= 28) {rq2[i] = 1;}for (int i = r3; i >= 0; i -= 33) {rq3[i] = 1;}for (int i = d + 1; i <= 21252; i++) {if (rq1[i] == 1 && rq2[i] == 1 && rq3[i] == 1) {//cout << i - d << endl;//cout<< "Case " << cnt++ << ": the next triple peak occurs in " << i - d << " days." << endl;//printf("Case %d: the next triple peak occurs in %d days.\n", cnt++, i - d);printf("Case %d: the next triple peak occurs in %d days.\n", cnt++, i - d);break;}}}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。