俄羅斯輪盤賭,想必很多人都聽說過,一種殘忍的賭博遊戲。遊戲的道具是一把左***,其規則也很簡單:在左***中的 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未中...