首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

經典算法題:龜兔賽跑模擬與 C 語言實現詳解

     編輯:關於C語言

問題描述

烏龜與兔子在矩形跑道上賽跑。烏龜速度 3 米/分,兔子 9 米/分。兔子每跑 10 分鐘回頭檢視:若領先烏龜則路邊休息 30 分鐘,否則繼續跑 10 分鐘。烏龜全程不休息。給定比賽時間 T 分鐘,輸出獲勝者(烏龜 @_@、兔子 ^_^、平局 -_-)及獲勝距離。

算法邏輯分析

採用分鐘級離散模擬。維護兩變量 turtle、rabbit 累積距離,flag 記錄兔子剩餘休息時間。每分鐘迭代:

  1. 烏龜固定前進 3 米
  2. 兔子非休息狀態下,每 10 分鐘檢查是否領先,領先則設 flag=30 進入休息
  3. 休息中 flag 遞減,不移動;非休息狀態前進 9 米

完整 C 語言實現

#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 變量巧妙實現休息狀態機
  • 輸出格式嚴格遵循題目要求:表情符號 + 空格 + 距離
  • 樣例輸入 242 輸出 @_@ 726,驗證烏龜因兔子頻繁休息而反超
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved