生理周期 (枚举)

瘦欲@ 提交于 2020-01-22 03:12:09

 

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

  

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!