問題
、身体的、感情的、知的サイクルは、それぞれ、3つの月経周期を持って生まれ、そのサイクル長は23日、28日と33日です。
毎日のサイクルのピークです。そのピークはこの日で、人々が適切な方法で優れてます。
例えば、知性のピーク期間は、迅速な思考の人々は、濃度が容易になります。
3サイクル周囲に異なるので、ピークが同じ日に3サイクルに該当しない通常です。
それぞれの人のために、私たちはトリプルピーク日を知りたいです。各期間について、
我々は現在の年の最初の日から与えられます、(必ずしも最初の数日間は、ピークに表示され
、時間とピーク時間)。あなたの仕事は、日数に年の最初の日からスタートを与えられた
番号、(与えられた時間は含みません)与えられた同じ時間開始から次のトリプルピーク出力
日を(指定された時間からの日数) 。たとえば、次の所定の時間は10である三次ある
ピーク時間(これは3ではないことに注意してください)同じ、出力2のために12日です。
エントリー
入力4つの整数:P、E、I、およびD。P、eは、私は、身体的、感情的、知的サイクルのピークの時間(時間は、年の最初の日から数えている)を表します。dが与えられた時間であり、それはE、P未満、又はIであってもよいです。すべての値が負でないと未満365あり、所要時間は以下の21252です。
輸出
次の3日間のピーク(指定された時間からの日数)で、与えられた時間から始まります。
サンプル入力
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
サンプル出力
ケース1:次のトリプルピークは21252日に発生しました。
ケース2:次のトリプルピークは21152日に発生しました。
ケース3:次のトリプルピークは19575日に発生しました。
ケース4:次のトリプルピークは16994日に発生しました。
ケース5:次のトリプルピークは8910日で起こります。
ケース6:次のトリプルピークは10789日に発生しました。
問題解決のアイデア:
各kの日付が満たされた場合、参照するために、21252日にしようとするD + 1日までに開始し(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);
for(;(k-e)%28;k+23)
for(;(k-i)%33;k+23*28);
cout<<"Case"<<CaseNo<<":the next triple peak occurs in "<<k-d<<"days."<<endl;
return 0;
}