約瑟夫問題:
約瑟夫遊戲的大意:30個遊客同乘一條船,因為嚴重超載, 加上風浪大作,危險萬分。因此船長告訴乘客,只有將全船 一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只 得同意這種辦法,並議定30 個人圍成一圈,由第乙個人數起,依次報數,數到第9人,便把他投入大海中,然後再從 他的下乙個人數起,數到第9人,再將他投入大海中,如此 迴圈地進行,直到剩下 15 個遊客為止。問:哪些位置是將 被扔下大海的位置?
遞迴解法:
大致思路,假設簡化成10人
初始情況為:
0 1 2 3 4 5 6 7 8 9
扔下去乙個之後:
0 1 2 4 5 6 7 8 9
假如讓剩下的人重新組成環,為了消除原編號3的空位影響,按照,新編號=(舊編號-最大報數)%舊人數,重新編號。
原始 0 1 2 3 4 5 6 7 8 9
舊環 0 1 2 4 5 6 7 8 9
新環 6 7 8 0 1 2 3 4 5
這樣就解決了新環在數學上的不連續性
同時舊編號=(新編號+最大報數值)%舊人數
由於最開始的淘汰的編號是容易知道的,而每一輪的編號是可以由上一輪淘汰的編號得到的,所以可以用遞迴的思想,回溯到第一輪,再推出下一輪的編號。
偽**:
int ysfdg(int sum,int value,int n)
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...