7-39 龜兔賽跑(C語言數學法)
這題的題面長這樣:
烏龜與兔子進行賽跑,跑場是一個矩型跑道,跑道邊可以隨地進行休息。烏龜每分鐘可以前進3米,兔子每分鐘前進9米;兔子嫌烏龜跑得慢,覺得肯定能跑贏烏龜,於是,每跑10分鐘回頭看一下烏龜,若發現自己超過烏龜,就在路邊休息,每次休息30分鐘,否則繼續跑10分鐘;而烏龜非常努力,一直跑,不休息。假定烏龜與兔子在同一起點同一時刻開始起跑,請問T分鐘後烏龜和兔子誰跑得快?
輸入格式:
輸入在一行中給出比賽時間T(分鐘)。
輸出格式:
在一行中輸出比賽的結果:烏龜贏輸出 @_@ ,兔子贏輸出 ^_^ ,平局則輸出 -_- ,後跟1空格,再輸出勝利者跑完的距離。
輸入樣例:
242輸出樣例:
@_@ 726
分析一下題意:烏龜始終以 3m/min 的速度行進,而兔子的行進速度是 9m/min。兔子每次只會連續跑 10min,也就是 90m,如果兔子每次檢查發現烏龜落後了,就會連續休息 30min。在這 30min 中烏龜會行進 30min * 3m/min = 90m.
那末從第 0min 開始兔子和烏龜起跑,第 10min 時兔子行進了 90m,烏龜行進了 30m,這時候兔子比烏龜領先於是休息。烏龜和兔子的落差 60m,烏龜需要花 20min 的時間追平,於是在第 30min,烏龜和兔子的行進距離相等,都為 90m.
兔子在第 40min 時醒來,此時烏龜領先兔子 10min * 3m/min = 30m,這段路程差兔子追平需要的時間是 30m/(9m/min-3m/min) = 5min.
那末是不是說在第 45min 的時候龜兔賽跑完成了一個週期呢?注意到兔子在檢查到烏龜不落後於自己時會連續跑 10min,在第 45min 時兔子才跑出 5min,也就是說兔子在第 50min 才會停下來看一看烏龜在哪裡。
繼續推導就能得到這樣一張圖:
橫軸每一小格表示 10min,紅線是兔子的行進路程,藍線是烏龜的行進路程。推導的結果是龜兔賽跑的週期是 90min,每個週期的第0、30、45、60、90min 是烏龜和兔子路程相等的時間點。剩下的事情就是簡單的對時間取餘和區間判斷了。
程式碼在下面:
#include <stdio.h>
int main() {
int time = 0;
scanf("%d", &time);
getchar();
int endDis = 0;
// 週期 90 min 重複一次,也就是每 270 m 重複一次
int circle = 270 * (time / 90);
if (time%45 == 0 || time%30 == 0) {
printf("-_-"); // 平局的情形,這裡把對90取餘得0、30、60處理成對30取餘得0
endDis = time * 3;
} else if (time%90 < 30 || (time%90 < 60 && time%90 > 45)) {
printf("^_^"); // 兔子贏的區間,賽跑時間過了(time/90)個週期
if (time%90 < 10) { endDis = (time%90)*9 + circle; }
else if (time%90 < 30) { endDis = 90 + circle; } // 兔子在睡覺
else if (time%90 < 50) { endDis = (time%90 - 45)*9 + circle + 135; }
else { endDis = circle + 180 } // 兔子還是在睡覺
} else {
printf("@_@"); // 烏龜贏的情形,由於烏龜始終勻速行進,路程很好處理
endDis = time * 3;
}
printf(" %d", endDis);
return 0;
}
相關文章
- [譯]Kotlin中的龜(List)兔(Sequence)賽跑Kotlin
- 龜兔比賽 多執行緒執行緒
- 資訊學奧賽--C語言筆記(一)C語言筆記
- Floyd 迴圈檢測演算法(快慢指標法/龜兔指標法)演算法指標
- 新學一種c語言寫法C語言
- C++開發者快速學習Objective-C語言核心語法C++ObjectC語言
- C語言學習方法,怎麼學習C語言?C語言
- C語言學習筆記之變數C語言筆記變數
- 逍遙自在學C語言 | 算數運算子C語言
- 每日一題:C語言經典例題之雞兔同籠每日一題C語言
- C語言初學C語言
- 重學C語言_資料結構與基礎語法C語言資料結構
- 第一屆C語言比賽答案C語言
- 矽兔賽跑:2017上半年創投圈終極覆盤創投
- 重新學C語言2C語言
- C語言再學習C語言
- C語言學習心得C語言
- C語言的學習C語言
- 如何學好C語言C語言
- C語言學習 兩個數的平方和C語言
- 關於大數(C語言)C語言
- 猜數遊戲--C語言描述遊戲C語言
- 數學語言看世界
- 數學標記語言
- C語言必知內容,不知道的人學C語言寸步難行,C語言學習必知項C語言
- 國際C語言混亂程式碼大賽C語言
- C# 語言在AGI 賽道上能做什麼C#
- C語言:一種高效、易學的程式語言C語言
- C/C++語言的學習方向C++
- C 語言學習筆記筆記
- C語言學習筆記C語言筆記
- C語言學習 相同元素C語言
- C語言指標學習C語言指標
- C語言深入學習二C語言
- 學習C語言的教材C語言
- c語言基礎學習C語言
- 高精度減法(C語言實現)C語言
- 12天學好C語言——記錄我的C語言學習之路(Day 4)C語言