1. 程式人生 > >pta 中M2018秋C入門和進階練習 7-39 龜兔賽跑 (20 分)

pta 中M2018秋C入門和進階練習 7-39 龜兔賽跑 (20 分)

7-39 龜兔賽跑 (20 分)

烏龜與兔子進行賽跑,跑場是一個矩型跑道,跑道邊可以隨地進行休息。烏龜每分鐘可以前進3米,兔子每分鐘前進9米;兔子嫌烏龜跑得慢,覺得肯定能跑贏烏龜,於是,每跑10分鐘回頭看一下烏龜,若發現自己超過烏龜,就在路邊休息,每次休息30分鐘,否則繼續跑10分鐘;而烏龜非常努力,一直跑,不休息。假定烏龜與兔子在同一起點同一時刻開始起跑,請問T分鐘後烏龜和兔子誰跑得快?

輸入格式:

輸入在一行中給出比賽時間T(分鐘)。

輸出格式:

在一行中輸出比賽的結果:烏龜贏輸出@[email protected],兔子贏輸出^_^,平局則輸出-_-;後跟1空格,再輸出勝利者跑完的距離。

輸入樣例:

242

輸出樣例:

@[email protected] 726

 思路:用一個變量表示輸入時間,兩個變量表示兔子和烏龜的路程。烏龜的路程就是每過一分鐘+4米,而兔子他有兩種狀態,跑和休息,我們用兩個變數模擬這種狀態。這題關鍵是如何判斷兔子處於什麼狀態。兔子一開始是跑10分鐘,然後比較和烏龜的距離,比烏龜快就休息30分鐘然後在跑10分鐘,慢就繼續跑10分鐘,然後比較和烏龜的距離……如此迴圈。兔子的路程在跑的狀態沒分鐘+10.

#include <stdio.h>

int main () {
    
    int rabbit=0,turtle=0,minute,rest=-1,run=10;  //rest為0或負時,兔子休息,run為1-10是兔子跑,rest=0時和下面17行if衝突
    scanf ("%d",&minute) ; 
    
    while(minute--){
        turtle += 3;
        if (run-- > 0)
            rabbit += 9;
        if (run == 0 ){            //兔子跑10分鐘回頭看一下,如果比烏龜快就休息30分鐘,反之再跑10分鐘
            if (rabbit > turtle)   
            rest = 30;
            else run = 10 ;
        }
        if (rest-- == 0)                    //休息結束繼續跑10分鐘
            run = 10;
    }
    //printf("rabbit=%d,turtle=%d\n",rabbit,turtle);
    if(turtle > rabbit)
        printf("@
[email protected]
%d",turtle); else if (rabbit > turtle) printf("^_^ %d",rabbit); else printf("-_- %d",rabbit); return 0 ; }