程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 生理周期 (poj 1006) 題解,poj1006

生理周期 (poj 1006) 題解,poj1006

編輯:Delphi

生理周期 (poj 1006) 題解,poj1006


【問題描述】

     人生來就有三個生理周期,分別為體力、感情和智力周期,它們的周期長度為23天、28天和33天。每一個周期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,智力周期的高峰,人會思維敏捷,精力容易高度集中。因為三個周期的周長不同,所以通常三個周期的高峰不會落在同一天。對於每個人,我們想知道何時三個高峰落在同一天。對於每個周期,我們會給出從當前年份的第一天開始,到出現高峰的天數(不一定是第一次高峰出現的時間)。你的任務是給定一個從當年第一天開始數的天數,輸出從給定時間開始(不包括給定時間)下一次三個高峰落在同一天的時間(距給定時間的天數)。例如:給定時間為10,下次出現三個高峰同天的時間是12,則輸出2(注意這裡不是3)。輸入有多組數據,以一行-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

【樣例輸出】

    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,再搜,搜到三個高峰在一起就輸出,交上去之後發現TLE了……果斷換思路。

     好吧,其實思路也沒有換,只是減少了一些不可能的枚舉而已,由題意可知,首先能被23整除的數先算出來,然後在被23整除的基礎上,即每次加23,能被28整除的數算出來,然後在被23和28都能整除的基礎上,即每次加23*28,能被33整除的數算出來,這樣得到的數減去開始的天數即為答案。

【代碼實現】

 1 var p,e,i,d,x,k:longint;
 2 begin
 3  while k=k do
 4   begin
 5    inc(k);
 6    readln(p,e,i,d);
 7    if (p=-1)and(e=-1)and(i=-1)and(d=-1) then
 8     break;
 9    for x:=d+1 to 21252 do
10     if abs(x-p)mod 23=0 then
11      break;
12    while x<=21252 do
13     begin
14      if abs(x-e) mod 28=0 then//注意:先判斷,再加,有極限數據,下面同理
15       break;
16      inc(x,23);
17     end;
18    while x<=21252 do
19     begin
20      if abs(x-i) mod 33=0 then
21       break;
22      inc(x,23*28);
23     end;
24    writeln('Case ',k,': the next triple peak occurs in ',x-d,' days.');
25   end;
26 end.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved