資料結構實踐專案之俄羅斯輪盤賭小遊戲

2021-08-15 14:37:58 字數 3367 閱讀 7155

俄羅斯輪盤賭,想必很多人都聽說過,一種殘忍的賭博遊戲。遊戲的道具是一把左***,其規則也很簡單:在左***中的 6 個彈槽中隨意放入一顆或者多顆子彈,在任意旋轉轉輪之後,關上轉輪。遊戲的參加者輪流把手槍對著自己,扣動扳機:中槍或是怯場,即為輸的一方;堅持到最後的即為勝者。

本節實踐專案同輪盤賭類似,

遊戲規則

:n 個參加者排成乙個環,每次由主持向左***中裝一顆子彈,並隨機轉動關上轉輪,遊戲從第乙個人開始,輪流拿槍;中槍者退出賭桌,退出者的下乙個人作為第一人開始下一輪遊戲。直至最後剩餘乙個人,即為勝者。要求:模擬輪盤賭的遊戲規則,找到遊戲的最終勝者。

解決類似的問題,使用線性表的順序儲存結構和鏈式儲存結構都能實現,根據遊戲規則,在使用鏈式儲存結構時只需使用迴圈鍊錶即可輕鬆解決問題。採用順序儲存結構時,同樣要在腦海中將陣列的首尾進行連線,即當需要從陣列中最後乙個位置尋找下乙個位置時,要能夠跳轉到陣列的第乙個位置。(使用取餘運算可以解決)

具體實現**如下:

#include

#include

#include

typedef

struct

gambler

gambler;

int

main

()

//當只剩餘乙個人時,此場結束

while

(n!=1)

printf

("編號為 %d 的賭徒退出賭博,剩餘賭徒編號依次為:\n"

,gamblers[i-1

].number);

//使用順序儲存時,如果刪除元素,需要將其後序位置的元素進行全部前移

for

(j=i-1

; j+1

<=n; j++)

n--;

//此時參與人數由 n 個人變為 n-1 個人

for

(int k=

1; k<=n; k++)

printf("

\n");

location=i-1

;//location表示的是下一輪開始的位置

//同樣注意location值的範圍

if

(location>n)

round++;

}

printf

("最終勝利的賭徒編號是:%d\n"

,gamblers[

1].number);

}

執行結果示例:

輸入賭徒的人數:5

將賭徒依次編號為 1-5

第 1 輪開始,從編號為 1 的人開始,槍在第 4 次扣動扳機時會響

編號為 4 的賭徒退出賭博,剩餘賭徒編號依次為:

1 2 3 5

第 2 輪開始,從編號為 5 的人開始,槍在第 6 次扣動扳機時會響

編號為 1 的賭徒退出賭博,剩餘賭徒編號依次為:

2 3 5

第 3 輪開始,從編號為 2 的人開始,槍在第 2 次扣動扳機時會響

編號為 3 的賭徒退出賭博,剩餘賭徒編號依次為:

2 5第 4 輪開始,從編號為 5 的人開始,槍在第 5 次扣動扳機時會響

編號為 5 的賭徒退出賭博,剩餘賭徒編號依次為:

2最終勝利的賭徒編號是:2

採用鏈式儲存結構對於求此類問題是最容易理解的,同時也避免了當參與人數較多時,像順序儲存那樣頻繁地移動資料。

具體實現**如下:

#include

#include

#include

typedef

enum

bool

;typedef

struct

line

line;

//按照賭徒人數,初始化迴圈鍊錶

void

initline

(line ** head,

int n)

list->next=*head;

//將鍊錶成環

}//輸出鍊錶中所有的結點資訊

void

display

(line * head)

printf

("%d\n"

,temp->no);

}int

main

()//將要刪除結點從鍊錶中刪除,並釋放其占用空間

printf

("編號為 %d 的賭徒退出賭博,剩餘賭徒編號依次為:\n"

,temp->next->no);

line * del=temp->next;

temp->next=temp->next->next;

if(del==head)

free

(del);

display

(head);

//賦值新一輪開始的位置

linenext=temp->next;

round++;

//記錄迴圈次數

}printf

("最終勝利的賭徒編號是:%d\n"

,head->no);

return0;

}

執行結果示例:

輸入賭徒人數:5

第 1 輪開始,從編號為 1 的人開始,槍在第 4 次扣動扳機時會響

編號為 4 的賭徒退出賭博,剩餘賭徒編號依次為:

1 2 3 5

第 2 輪開始,從編號為 5 的人開始,槍在第 3 次扣動扳機時會響

編號為 2 的賭徒退出賭博,剩餘賭徒編號依次為:

1 3 5

第 3 輪開始,從編號為 3 的人開始,槍在第 4 次扣動扳機時會響

編號為 3 的賭徒退出賭博,剩餘賭徒編號依次為:

1 5第 4 輪開始,從編號為 5 的人開始,槍在第 4 次扣動扳機時會響

編號為 1 的賭徒退出賭博,剩餘賭徒編號依次為: 5

最終勝利的賭徒編號是:5

本節借輪盤賭小遊戲,帶領大家重新熟悉了線性表的順序儲存結構和鏈式儲存結構,如果你能夠根據專案要求自行完成兩種結構**實現的編寫工作,恭喜你可以順利進入下面章節的學習。

資料結構實踐專案之俄羅斯輪盤賭小遊戲

俄羅斯輪盤賭,想必很多人都聽說過,一種殘忍的遊戲。遊戲的道具是一把左 其規則也很簡單 在左 中的 6 個彈槽中隨意放入一顆或者多顆子彈,在任意旋轉轉輪之後,關上轉輪。遊戲的參加者輪流把手槍對著自己,扣動扳機 中槍或是怯場,即為輸的一方 堅持到最後的即為勝者。本節實踐專案同輪盤賭類似,遊戲規則 n 個...

資料結構課程設計之俄羅斯輪盤賭遊戲

俄羅斯輪盤賭是一種殘忍的賭博遊戲。遊戲的道具是一把左 其規則也很簡單 在左 中的6個彈槽中隨意放入一顆或者多顆子彈,在任意旋轉轉輪之後,關上轉輪。遊戲的參加者輪流把手槍對著自己,扣動扳機 中槍或是怯場,即為輸的一方 堅持到最後的即為勝者。遊戲規則 n個參加者排成乙個環,每次由主持向左 中裝一顆子彈,...

學習筆記1 俄羅斯輪盤賭的概率分析

他給出了4種情形,彈倉容量為6 1顆子彈隨機分布 2顆子彈隨機分布 2顆子彈相鄰分布,2顆子彈間隔乙個彈倉分布。在每種情形下,第1個人中槍的概率是多少?在第1個人沒有中槍的情況下,第2個人中槍的概率是多少?但是他只給出了答案,沒有寫出過程。下面我以自己的思考給出過程,p 1 代表1中槍的概率,1未中...