北大郭煒程式設計演算法二 生理週期

2021-09-25 08:12:46 字數 2204 閱讀 9465

人有體力、情商、智商的高峰日子,它們分別每隔 23天、28天和33天出現一次。對於每個人,我們想 知道何時三個高峰落在同一天。給定三個高峰出現 的日子p,e和i(不一定是第一次高峰出現的日子), 再給定另乙個指定的日子d,你的任務是輸出日子d 之後,下一次三個高峰落在同一天的日子(用距離d 的天數表示)。例如:給定日子為10,下次出現三 個高峰同一天的日子是12,則輸出2。

輸入

輸入四個整數:p, e, i和d。 p, e, i分別表示體力、情感和智力 高峰出現的日子。d是給定的日子,可能小於p, e或 i。所有給 定日子是非負的並且小於或等於365,所求的日子小於或等於 21252。

輸出

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

輸入樣例

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.

解題分析:

1、一般方法:

按照題目要求,就是從給定的p,e,i這個初始的日子,開始往後找,找到相同的在d以後的一天是體力和雙商最高的,分別迴圈,然後滿足限制要求就可以了,**如下:

#include #include using namespace std;

int main()

} else break;

} return 0;

}

2、列舉法:

這個是直接用d後的每一天減去p  ,e ,i後,除以相對應的體力和雙商出現的間隔時間,當然可以

(j – p)%23 == 0 && (j – e)%28 == 0 && (j - i)%33 == 0
但是如何能夠查的更加快呢,我們分析,當體力出現最高的乙個日子找著了以後,那麼看是不是情商最高的日子,然後情商的迴圈就可以直接每隔23天再確認一次是不是就可以了,以此方法,那麼出現前兩者共同高的日子應該是23*28的正整數倍了,這樣就去除了那些不必要的檢查,**如下:

#include #include using namespace std;

#define n 21252

int main()

{ int p,e,i,d,caseno=0;

while(cin>>p>>e>>i>>d && p!=-1 && e!=-1 && i!=-1 && d!=-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"《解釋一下for()後為什麼直接加分號:

直接在for後的括號外加分號是因為只做迴圈,做了迴圈後,就直接蹦到下一迴圈了,就比如定義乙個陣列a[4],

for(int i=0;i<4;i++)

a[i]=i;

這樣是a[0]=0,a[1]=1,a[2]=2,a[3]=3,但是

for(int i=0;i<4;i++);

a[i]=i;

就只會出來a[3]=3,這是因為只執行了括號裡的,就結束了,並沒有繼續執行a[i]=i;,而是在迴圈執行完了之後執行了a[i]=i;所以會是只有a[3]=3

北大郭煒程式設計演算法二 完美立方

形如a3 b3 c3 d3 a,b,c,d的立方,下同 的等式被稱為完美立方等式。例如 12 3 6 3 8 3 10 3 編寫乙個程式,對任給的正整數n n 100 尋找所有的四元組 a,b,c,d 使得a3 b3 c3 d3,其中a,b,c,d 大於 1,小於等於n,且b c d。輸入 乙個正整...

北大程式設計實習公開課程式設計作業,魔獸世界之二 裝備

魔獸世界的第二個版本,裝備。相較於版本一,武士已經不能直接用兩個全域性資料儲存名稱和初始生命值就可以搞定了。這裡先分析一下題目。武士有5個種類,每種都有自己的特徵,但他們共有的特徵是有名字和生命元這兩個屬性。所以把這兩個共有屬性抽象出來作為乙個基類warrior。5種武士分別從這個基類派生。邏輯上,...

MOOC程式設計與演算法二 遞迴二

1.表示式計算 輸入為四則運算表示式,僅由整數 組成,沒有空格,要求求其值。假設運算子結果都是整數 結果也是整數 表示式也是遞迴的定義 表示式由項的 組成 項由因子的 組成,因子可以是整數,也可以由帶括號的表示式組成 判斷是否還有表示式,項和因子,需要唯讀不取,根據讀出的字元確定是否需要取,並做後面...