第一周 枚举 例题3.生理周期
2017-11-30 18:38
337 查看
MOOC 程序设计与算法(二)算法基础 郭炜 第三次开课
······个人学习记录······
输入四个整数:p, e, i和d。 p, e, i分别表示体力、情感和智力高峰出现的日子。d是给定的日子,可能小于p, e或 i。所有给定日子是非负的并且小于或等于365,所求的日子小于或等于21252。
输出:
从给定日子起,下一次三个高峰同一天的日子(距离给定日子的天数)。
输入样例:
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.
改良版:
······个人学习记录······
问题描述:
输入:输入四个整数:p, e, i和d。 p, e, i分别表示体力、情感和智力高峰出现的日子。d是给定的日子,可能小于p, e或 i。所有给定日子是非负的并且小于或等于365,所求的日子小于或等于21252。
输出:
从给定日子起,下一次三个高峰同一天的日子(距离给定日子的天数)。
输入样例:
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.
代码:
//简单枚举 //从d+1试到21252,有符合条件的就输出 //思路简单,代码性能较差 #include<iostream> #include<cstdio> using namespace std; #define N 21252 int main() { int p, e, i, d; int n = 1; while (scanf("%d%d%d%d", &p, &e, &i, &d)) { if (p == -1) return 0; for (int j = d+1; j <= N; j++) { if (((j - p) % 23 == 0) && ((j - e) % 28 == 0) && ((j - i) % 33 == 0)) { printf("Case %d:", n++); printf("the next triple peak occurs in %d days.\n", j - d); } } } return 0; }
改良版:
//有条件的循环,节约很多时间空间 #include<iostream> #include<cstdio> using namespace std; #define N 21252 int main() { int p, e, i, d; int n = 1; while (scanf("%d%d%d%d", &p, &e, &i, &d)) { if (p == -1) return 0; int j; //这一步找到了d之后的第一个体力高峰日 for (j = d + 1; (j - p) % 23; j++); //这一步在体力高峰日的基础上,找到了一个同样是情感高峰的日子 for (; (j - e) % 28; j += 23); //最后在体力情感双高峰的日子里面,找到一个还是智力高峰的日子 for (; (j - i) % 33; j += 23 * 28); //输出结果 printf("Case %d:", n++); printf("the next triple peak occurs in %d days.\n", j - d); } return 0; }
相关文章推荐
- 第8章例题--生理周期--2977
- poj-4148-生理周期-C语言-枚举
- 简单枚举的例子:生理周期
- 第一周 枚举 例题1.最大素数
- 第一周 枚举 例题4.称硬币 [POJ1013]
- 2977:生理周期(枚举)
- 第一周 枚举 例题2.完美立方
- 枚举举例,生理周期
- 枚举——最佳生理周期
- 2018.4.3(程序设计与算法)生理周期,p,e,i出现高峰(枚举的练习)
- 蓝桥杯C语言培训3 典型问题的递归框架 例题6 代表团出访(组合枚举)
- poj 1006 生理周期 中国剩余定理
- 中国剩余定理算法详解 + POJ 1006 Biorhythms 生理周期
- 例题:枚举排列
- 第一周上机实践项目——用枚举表示对称方式
- 第一周(项目一)——用枚举表示对称方式。
- 第一周(春)项目一 用枚举表示对称方式
- CCF-训练50题-NO.8-生理周期
- POJ:1006--BIORHYTHM(生理周期计算)
- POJ 1006 生理周期 【中国剩余定理】