题目链接:生理周期
解题思路:从d+1天开始试,先找到体力值高峰的日子,然后再找体力和情感双高峰的日子(找到体力高峰的日子后只需要考虑下一个体力高峰的日子是不是情感高峰),然后再找体力、情感、智力三高峰的日子。为了省时我们可以跳着试,因为第一个体力高峰的日子到第二个体力高峰的日子没有必要去试,所以可以在找体力、情感双高峰的日子的时候就可以用体力高峰的周期当做累加条件。同理在找三高峰的日子的时候就可以以体力、情感双高峰的周期来累加测试。
#include<iostream>
using namespace std;
int main(){
int p,e,i,d;
int k; //从d+1天开始试,k为三个高峰的日子
cin>>p>>e>>i>>d;
if(p<0 || e<0 || i<0 || d<0){
exit(0);
}
//先找体力为高峰的日子
k = d+1;
while((k-p)%23!=0){
k++;
}
//再找体力、情感双高峰的日子
while((k-e)%28!=0){
k += 23;
}
//再找三高峰的日子
while((k-i)%33!=0){
k += 23*28;
}
cout<<k-d;
return 0;
}