烏龜與兔子在矩形跑道上賽跑。烏龜速度 3 米/分,兔子 9 米/分。兔子每跑 10 分鐘回頭檢視:若領先烏龜則路邊休息 30 分鐘,否則繼續跑 10 分鐘。烏龜全程不休息。給定比賽時間 T 分鐘,輸出獲勝者(烏龜 @_@、兔子 ^_^、平局 -_-)及獲勝距離。
採用分鐘級離散模擬。維護兩變量 turtle、rabbit 累積距離,flag 記錄兔子剩餘休息時間。每分鐘迭代:
flag=30 進入休息flag 遞減,不移動;非休息狀態前進 9 米#include <stdio.h>
#include <string.h>
int main(void) {
int m, i, flag = 0;
int turtle = 0, rabbit = 0;
scanf("%d", &m);
for (i = 0; i < m; i++) {
turtle += 3;
if (flag == 0 && i % 10 == 0 && rabbit > turtle) {
flag = 30; // 休息 30 分鐘
}
if (flag == 0) {
rabbit += 9;
} else {
flag--; // 休息倒計時
}
}
char win_s[5];
int win_d;
if (rabbit > turtle) {
strcpy(win_s, "^_^");
win_d = rabbit;
} else if (rabbit < turtle) {
strcpy(win_s, "@_@");
win_d = turtle;
} else {
strcpy(win_s, "-_-");
win_d = turtle;
}
printf("%s %d\n", win_s, win_d);
return 0;
}
flag 變量巧妙實現休息狀態機@_@ 726,驗證烏龜因兔子頻繁休息而反超