約瑟夫問題求解 C

2021-08-23 13:19:14 字數 841 閱讀 6779

設有n 個人站成一圈,每個人持有乙個密碼(正整數) 。現從第t 個人開始,按順時針方向「1,2,3,4, …」迴圈報數,數到m1 (第t 個人所持密碼)的人出列,然後從出列者的下乙個人重新開始報數,數到m2 (剛出列者所持密碼)的人又出列,如此重複進行,直到n 個人都出列為止。

問題是 :對於任意給定的n 個人的原始排列順序,求出n 個人的出列順序。

輸入資料從文字檔案中讀取。該檔案有兩行:第1 行只有乙個整數,表示報數的起始位置;第2 行是n 個所持密碼。

輸出結果顯示在螢幕上。

例如,從文字檔案讀取資料 2

5 6 3 2 2 4

螢幕顯示

1 6 5 3 4 2

程式如下:

#include #include #include using namespace std; // 節點類 class node int stride, number; /* stride約瑟夫問題的m值,number是人的序號 */ node *next; }; // 迴圈鍊錶 class circlelist // 在鍊錶的末尾插入新節點 void insertlast(int stride, int number) else length++; } // 刪除node的下乙個節點 void removenext(node * node) // 根據序號查詢節點 node *getnode(int rank) return t; } node *first, *last; int length; }; int main() stride = prev->next->stride; coutnumber<<" "; list.removenext(prev); begin = prev->next; } cout<

約瑟夫問題求解

終於又到了大名鼎鼎的約瑟夫問題了。約瑟夫問題也算是近代比較知名的乙個演算法問題了,有著成熟的演算法,其中有著強行模擬,還存在著一些神奇的數學方法,哈哈。今天我又來了強行模擬。啊,啊,啊。瞎。下面是問題的描述 題目描述 description 乙個旅行社要從n名旅客中選出一名幸運旅客,為他提供免費環球...

約瑟夫問題的求解!

已知有n 只猴子 以編號1,2,3,n 分別表示 圍坐一圈。從第一只猴子開始,按順序從1開始報數,數到 m 的那只猴子出列 接著再從從1 開始報數,報數到 m的那只猴子又出列 依此規律重複下,直到只剩乙隻猴子為止。輸入n和m,輸出最後剩下的猴子?此問題,即報數問題,也是約瑟夫問題!很多人一開始想到是...

約瑟夫環問題求解

約瑟夫問題如下 n個人圍成圈,依次編號為1,2,n,現在從1號開始依次報數,當報到m時,報m的人退出,下乙個人重新從1報起,迴圈下去,問最後剩下那個人的編號是多少?input amount 佇列人數 m 數到m時退出乙個人 output 最後乙個退出的人的下標 思路 用布林陣列做 我們可以把這amo...