醉漢過橋程式

程式功能說明:

有一個醉漢喝醉酒以後要過一條沒有欄杆的橋, 假設這條橋的長度有 40 步 (假設醉漢的步伐大小是固定的)、 寬度有 20 步, 醉漢站在橋這端的正中央開始往前走, 不幸的是他心有餘而力不足, 每一步往前走時不是往左偏就是往右偏, 他左手拿著酒瓶, 所以平均起來每跨五步中就有三次會向左偏移一步, 另外兩次會向右偏移一步,

  1. 你可不可以模擬這個醉漢, 在螢幕上以一字元表示此醉漢讓我們看看他是怎麼走的? 示範執行程式 (在寫這個程式的時候你可能會需要用到 stdlib 函式庫中的 srand() 及 rand() 函式,以及 dos 函式庫中的 delay() 函式。 在 stdlib 函式庫中還有一組 randomize() 及 random() 的函式也是可以使用的, 可是這一組函式是只有 DOS 環境下才支援的, ANSI C 並不支援此組函式。 這些函式的用法請參考 TURBO C 的線上說明。)

  2. 你能不能寫一個程式模擬很多很多遍, 然後估算一下這個醉漢走過橋的機率是多少? 醉漢平均走幾步會落水? 示範執行程式

  3. 你能不能解釋一下理論上要如何計算醉漢過橋的機率? (我知道有些人喜歡自己先想一想, 假設在橋這邊都還沒有往前走時, 當然位在橋中心點的機率是 1, 往前一步的時候, 你知道醉漢不可能跑到橋邊邊去了, 他只可能在中心點靠左一步或是靠右一步的地方, 而這兩個地方的機率分別是 0.6 及 0.4, 在下一步呢? 只可能在中心點靠左兩步、 中心點、或是中心點靠右兩步的地方, 其機率分別是 0.6*0.6, 0.6*0.4+0.4*0.6, 及 0.4*0.4, 就這樣子一直算到第 40 步的地方為止...) 這不太容易用手計算出來, 需要寫一個小程式來計算。 示範執行程式

  4. 如果這個醉漢平均每跨四步裡會有一步是向後的, (也就是有 1/4 的機率是向後的, 3/4 的機率是向前的), 同時也和第一小題一樣每一步不管是向前還是向後都會同時向左或向右偏, (也就是其實醉漢只會向左前、左後、右前、右後四個方向來前進), 你可不可以模擬這個醉漢, 在螢幕上以一字元表示此醉漢讓我們看看他是怎麼走的? 示範執行程式

  5. 你能不能再寫一個程式模擬很多很多遍, 然後估算一下現在這個醉漢走過橋的機率是多少? 醉漢平均走幾步會落水? 示範執行程式

  6. 這種情況下理論上要計算醉漢過橋的機率要花一些時間, 留給其它的課去傷腦筋吧!

程式設計課程 首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw