生理周期 (枚举)

生理周期 
 输入 
  输入四个整数: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;           
}

  

永远渴望,大智若愚(stay hungry, stay foolish)
原文地址:https://www.cnblogs.com/h-hkai/p/7416664.html