生理周期
输入
输入四个整数: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.
简单的枚举,但是里面跳着试的思想真的是一个不错的思想!!!
问题相同,所用的思想却不同。
#include <iostream> #include <cstdio> using namespace std; #define N 21252 int main(){ int p,e,i,d,caseNo = 0; while( cin >> p >> e >>i >>d && p!= -1) { ++ caseNo; int k; for(k = d+1; (k-p)%23; ++k); //如果(k-p)%23不为0,继续下一步 for(; (k-e)%28; k+= 23); //跳过23个确保是23的倍数 for(; (k-i)%33; k+= 23*28); //跳过23*28个,在此基础上查找直到出现三个数公共的倍数 cout << "Case " << caseNo << ": the next triple peak occurs in " << k-d << " days." << endl; } return 0; }