題目鏈接:生理週期
解題思路:從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;
}