BuringStraw

BuringStraw

义冢oj P5032生理周期

題目:生理周期#

描述#

人生來就有三個生理周期,分別為體力,感情和智力周期。它們的周期長度為 23 天,28 天和 33 天。每一個周期中有一天是高峰。 在高峰這天,人會在相應的方面表現出色。例如,智力周期的高峰,人會思維敏捷,精力容易高度集中。因為三個周期的周長不同,所以通常三個周期的高峰不會落在同一天。對於每個人,我們想知道何時三個高峰落在同天。對於每個周期,我們會給出從當前年份的第一天開始,到出現高峰的天數 (不定基第次高峰出現的時間)。已知在當年的第 p 天出現體力高峰,第 e 天出現感情高峰,第 i 天出現智力高峰,*你的任務是給定一個天數 d,計算從 d 開始至少多少天後三個高峰落在同一天。

注意:若 d=10,如果下次出現 3 個高峰同天的時間是 12,則輸出 2 (注意這裡不是 3)。

輸入#

有多組測試數據,每行四個整數

,e,i,d。其中 p,e,i 分別表示體力、情感、智力的高峰出現的時間 (時間從當年的第 1 天開始計算)。 d 是給定的時間,可能小於 p,e 或 i。當 p=e=i=-1 時輸入結束。

輸出#

從給定時間起,下一次三個高峰同天的時間 (距離給定時間的天數)。

輸入範例 1#

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
21152
19575
16994
8910
10789

提示#

0<=p,e,i,d<=365

思路#

這本該是一道中國剩餘定理的題,但是巧了那節課我不在,

自學又搞不懂,

所以選擇使用暴力。

最後甚至 AC 了。

直接上代碼。

Code#

//I closed myself.What a happy zero-boomed contest!!!
#include<bits/stdc++.h>
using namespace std;
const int ji=23*28*33;

int zq[4];

int main(){
	freopen("cycle.in","r",stdin);
	freopen("cycle.out","w",stdout);
	
	int p,e,i,d;
	while(1){
		scanf("%d%d%d%d",zq+1,zq+2,zq+3,&d);
		if(zq[1]==-1&&zq[2]==-1&&zq[3]==-1){
			return 0;
		}
		int s=max(zq[1],max(zq[2],zq[3]));
		zq[1]%=23,zq[2]%=28,zq[3]%=33;
		if(s==0)s+=ji;
		if(s>d){
			while(s>=d){
				if(s%23==zq[1]&&s%28==zq[2]&&s%33==zq[3]){
					printf("%d\n",s-d);
					goto a;
				}
				s-=1;
			}
		}
		while(s%23!=zq[1]||s%28!=zq[2]||s%33!=zq[3]||s<d){
			s+=1;
		}
		printf("%d\n",s-d);
		a:;
	}
	
	fclose(stdout);
	fclose(stdin);
	return 0;
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。