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

狼追兔子問題:C語言模擬解析與數學驗證

     編輯:關於C

經典追逐問題的計算機模擬解法

「一隻兔子在原點 O,洞穴在正北 20 米的 B 點;一隻狼位於兔子正東 33 米的 A 點。狼的速度是兔子的兩倍,且始終朝著兔子當前位置直線奔跑。請問:兔子能否在狼追上前鑽進洞穴?」

這是一個經典的追逐曲線問題。網路上眾說紛紜,有人認為狼必追上,也有人引用「距離 100 碼、洞穴 60 碼」的類似題目作為反例。為了給出確切答案,我們可以用計算機模擬——無需求解複雜的微分方程,只需將時間離散化,逐步推進位置即可。

模擬核心邏輯

建立平面直角坐標系:兔子起始於 (0,0),沿 y 軸正向匀速前進;狼起始於 (33,0),每一步都朝「當前兔子位置」方向前進兩倍步長。程式碼採用遞推算法:

  • NextT():兔子單純沿 y 軸遞增 Td(本例 0.1 m)。
  • NextL():狼根據與兔子的相對向量,將步長 Ld = 2*Td 分解為 x、y 分量,向左上方移動。
  • 迴圈條件 dist() >= Td:當雙方距離小於兔子單步長度時視為「被追上」,終止模擬。

關鍵程式碼片段

double Td=0.1, Ld=0.2;          // 兔子/狼單步長
Tx=0; Ty=0;                     // 兔子初始座標
Lx=33; Ly=0;                    // 狼初始座標

while (dist() >= Td) {
    NextL();                    // 狼先動(基於兔子「當前」位置)
    NextT();                    // 兔再動
    printf("兔子:(%lf,%lf) 狼:(%lf,%lf)\n", Tx,Ty,Lx,Ly);
}

模擬結果分析

輸出顯示:當兔子跑到 y ≈ 21.9 m 時,狼座標約為 (0.0005, 21.7665),雙方距離已小於 0.1 m,判定為「追上」。此時兔子已超過洞穴位置(20 m)約 1.9 米。換句話說,兔子在到達洞口前就被狼追上了。

若將洞穴距離改為 22 m,兔子便能逃脫。同理,經典的「100 碼追 60 碼」題目中,臨界逃脫距離約為 66.7 碼,60 碼洞穴同樣無法倖免。

結論與啟示

計算機模擬證明:速度比 2:1、初始橫向距離 33 m 時,臨界逃脫距離約 22 m。這與解析解(追逐曲線積分)吻合。對於同類問題,只需調整初始參數與速度比,即可快速驗證結果,避免繁複推導。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved