百练4148:生理周期
題目
人有體力、情商、智商的高峰日子,它們分別每隔23天、28天和33天出現(xiàn)一次。
對(duì)于每個(gè)人,我們想知道何時(shí)三個(gè)高峰落在同一天。
給定三個(gè)高峰出現(xiàn)的日子p,e和i(不一定是第一次高峰出現(xiàn)的日子), 再給定另一個(gè)指定的日子d,
你的任務(wù)是輸出日子d 之后,下一次三個(gè)高峰落在同一天的日子(用距離d 的天數(shù)表示)。
例如:給定日子為10,下次出現(xiàn)三個(gè)高峰同一天的日子是12,則輸出2。
輸入
輸入四個(gè)整數(shù):p, e, i和d。p, e, i分別表示體力、情感和智力高峰出現(xiàn)的日子。
d是給定的日子,可能小于p, e或 i。
所有給定日子是非負(fù)的并且小于或等于365,所求的日子小于或等于21252。
輸出
從給定日子起,下一次三個(gè)高峰同一天的日子(距離給定日子的天數(shù))。
輸入樣例
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
輸出樣例
Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910 days.
Case 6: the next triple peak occurs in 10789 days.
思路
暴力枚舉
從d+1天開始,一直試到第21252 天,對(duì)其中每個(gè)日期k,看是否滿足
(k – p)%23 = = 0 && (k – e)%28 = = 0 && (k-i)%33 = = 0
如何試得更快?
跳著試!
代碼
其實(shí)這題可以無(wú)腦直接暴力:
for(k=d+1;k<=21252;k++){if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0)printf("Case %d: the next triple peak occurs in %d days.\n",c,k-d);}但這樣就太沒有技術(shù)含量了:
#include <cstdio> #include <iostream> using namespace std; int main () {int p,e,i,d,c=0;while(cin>>p>>e>>i>>d&&p!=-1){c++;int k;for(k=d+1;(k-p)%23;k++);for(;(k-e)%28;k+=23);for(;(k-i)%33;k+=23*28);printf("Case %d: the next triple peak occurs in %d days.\n",c,k-d);}return 0; }總結(jié)
以上是生活随笔為你收集整理的百练4148:生理周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Counterfeit Dollar
- 下一篇: 百练2810:完美立方