*生理周期
输入给定三个高峰p,e,i,(再给定另一个指定的日子)d
小于等于365,所求的日子小于等于21252
每隔23天,28天,33天,何时落在同一天
输出从给定日子起,下一次三个高峰同一天的日子(的天数)
0 0 0 0
0 0 0 100
-1 -1 -1 -1
Case1: the next triple peak occurs in 21252 days.
Case2: the next triple peak occurs in 21152 days.
两个体力高峰之间根本就不需要试了,先找到第一个体力高峰的日子,
每次对体力高峰的周期进行尝试,又找体力高峰又是情商高峰的日子,
尝试找体力周期和情商双高峰间隔就是体力周期和情商高峰间隔
最小公倍数,
*/
#include<iostream>
#include<cstdio>
#define N 21252
using namespace std;
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++);
for(;(k-e)%28;k+=23);//每隔23天做一个尝试
for(;(k-i)%33;k+=23*28);// 体力和情商双高峰
cout<<"Case "<<caseNo<<
":the next triple peak occurs in "<<k-d<<"days"<<endl;
}
return 0;
}
#include<stdio.h>
int main(){
int p,i,e,d;
scanf("%d%d%d%d",&p,&i,&e,&d);
int k,cnt=1;
for(k=d+1;k<=21252;k++){
if((k-p)%23==0&&(k-i)%28==0&&(k-33)%33==0)
printf("Case %d:the next triple is the %d days",cnt++,k);
}
return 0;
}
//23 28 33
#include<stdio.h>
int main(){
int p,i,e,d;
scanf("%d%d%d%d",&p,&i,&e,&d);
int k,cnt=1;
for(k=d+1;k<=21252;k++){
if((k-p)%23==0&&(k-i)%28==0&&(k-33)%33==0)
printf("Case %d:the next triple is the %d days",cnt++,k);
}
return 0;
}
//23 28 33
枚举--生理周期
最新推荐文章于 2021-05-24 05:07:20 发布