一、專案簡介
約瑟夫生者死者遊戲的大意是:30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分;因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得統一這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從他的下乙個人數起,數到第9人,再將他投入大海,如此迴圈,直到剩下15個乘客為止。問哪些位置是將被扔下大海的位置。
本遊戲的數學建模如下:假如n個旅客排成乙個環形,依次順序編號1,2,…, n。從某個指定的第s號開始。沿環計數,每數到第m個人就讓器出列,且從下乙個人開始重新計數,繼續進行下去。這個過程一直進行到剩下k個旅客為止。
本遊戲要求使用者輸入的內容包括:
旅客的個數,也就是n的值
離開旅客的間隔書,也就是m 的值
所有旅客的序號作為一組資料要求存放在某種資料結構中
本遊戲要求輸出的內容是包括:
離開旅客的序號
剩餘旅客的序號
二、構建設想
因為是乘客要構成乙個環形,所以很容易的就讓人聯想到了直接用迴圈鍊錶來解決這個問題,然後要注意到迴圈鍊錶的插入刪除所需要注意的選項就可以實現系統的大部分功能了。最後注意一些異常情況的拍錯,提高程式的健壯性,優化**的可讀性。
三、程式設計
3.1 程式的類與結構組織
約瑟夫生死遊戲一共有兩個類,因為要使用鍊錶,所以首先要做的是對於鍊錶的節點進行定義,如下**塊就是對鍊錶節點類的定義,其代表了整個乘客的資料:
使用C 實現的約瑟夫生死遊戲
約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得統一這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從他的下乙個人數起,數到第9人,再...
使用C 實現的約瑟夫生死遊戲
一 專案簡介 約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得統一這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從他的下乙個人數起,...
python約瑟夫生死小遊戲的實現
30 個人在一條船上,超載,需要 15 人下船。於是人們排成一隊,排隊的位置即為他們的編號。報數,從 1 開始,數到 9 的人下船。如此迴圈,直到船上僅剩 15 人為止,問都有哪些編號的人下船了呢?用環形鍊錶去構造資料結構 每逢9的倍數,將該鍊錶刪除,指標指向下乙個數字 首先構造環形鍊錶,這個很基本...