2018.4.3(程序設計與算法)生理週期,p,e,i出現高峯(枚舉的練習)

 人有體力、情商、智商的高峯日子,它們分別每隔 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。 
 

解題思路:從第d+1(=k)天開始,一直試到第21252天,對其中每個日期K看是否滿足; 即用枚舉

① : (k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0  判斷是否滿足三個高峯同一天

如何試的更快?  -->跳着試

思路:先判斷那一天爲體力高峯,然後跳過兩個體力高峯天之間的日期;再判斷哪天爲同時滿足體力與情商雙高峯的日期,然後跳過不滿足雙高峯的日期 接着測試三高峯的日期。

② : for(k=d+1;(k-p)%23;++k);

       for( ; (k-e)%28;k+=23);

         for( ; (k-i)%33;k+=23*28);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章