枚举:生理周期

来源:互联网 发布:nba2k16捏樱木花道数据 编辑:程序博客网 时间:2024/05/21 22:55

这里写图片描述
这里写图片描述
这里写图片描述
思路:从d+1天开始,一直试到第21252天,对其中每个日期k看是否满足。

(k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0如何试的最快?

跳着试。

#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;}
#include<stdio.h>#define N 21252int main(){     int p,e,i,d;     while(scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF)     {       int k;       k=d+1;         while((k-p)%23!=0)         {           k++;         }      while((k-e)%28!=0)      {       k=k+23;      }         while ((k-i)%33!=0)         {      k=k+23*28;         }printf("下一次三高峰合在一起的时间为%d\n",k-d);     }}