約瑟夫及相似問題的解法
- 約瑟夫問題的產生是據說著名猶太曆史學家josephus有過以下的故事:羅馬人佔領僑塔帕特後,39個 猶太人與josephus和他的朋友躲到一個洞中,39個猶太人決定先後自殺從而不用被敵人抓到,決定了一個自殺方法,所有人圍成一個圈,由第一個人開始報數,每報數到第三個該人就必須自殺,隨後從此人後面一位重新開始報數,josephus和他的朋友並不像遵從,於是josephus和他的朋友先假裝遵從,隨後站在了第16個和31的位置上,免去了性命之憂。這就是著名的約瑟夫問題。
現如今很多關於這種背景的思維題,比如報數出列,出列後從下一位繼續報數,直到剩餘兩位成為誘餌,其他人為獵手等的軍事遊戲,還是猴子爭王的背景題...在這些題目的背後都是這樣一種執行規則:
約瑟夫問題的解決
- 首先這種問題的背景都是,由總數為N的單位圍成一個圈,以q為一個小單位不斷迴圈,第q個除去,隨後繼續迴圈,直到最後剩餘(q-1)個單位停止。
- 首先以最原始的約瑟夫問題來看:(41個人輪番自殺)
相關推薦
約瑟夫及相似問題的解法
約瑟夫問題的產生是據說著名猶太曆史學家josephus有過以下的故事:羅馬人佔領僑塔帕特後,39個 猶太人與josephus和他的朋友躲到一個洞中,39個猶太人決定先後自殺從而不用被敵人抓到,決定了一個自殺方法,所有人圍成一個圈,由第一個人開始報數,每報數到第三個該人就必須自殺,隨後從此人後面一位重新開始報
約瑟夫問題的解法
解法一: 一次將消除的元素進行標記,最後判斷元素的個數,如果還剩一個,那麼迴圈結束。 public class YueSefuS { public static void main
一個不簡潔的約瑟夫環解法
python 算法 約瑟夫環類似模型:已知有n個人,每次間隔k個人剔除一個,求最後一個剩余的。此解法為變種,k最初為k-2,之後每次都加1。例:n=5,k=3。從1開始,第一次間隔k-2=1,將3剔除,第二次間隔k-1=2,將1剔除。依此類推,直至剩余最後一個元素。核心思路:將原列表復制多份橫向展開,
2746 約瑟夫問題(單向循環鏈表解法)
刪除 != ast pen 過程 turn style -c log 題目鏈接:http://bailian.openjudge.cn/practice/2746描述約瑟夫問題:有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴
約瑟夫環問題的兩種解法(詳解)
lang 方式 第一次 stat 位置 code 模擬 mod 想要 約瑟夫環問題的兩種解法(詳解) 題目: Josephus有過的故事:39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成一個
【Luogu1996】約瑟夫問題(模擬,解法彙總)
problem n個人,每次數到m的人出隊 輸出出隊順序 n<=100 solution1 模擬:每次列舉第m個人出隊 O(n,m) #include<iostream> using namespace std;
約瑟夫環問題的兩種解法(詳解)【轉】
題目: Josephus有過的故事:39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下一個重新報數,直到所有人都自殺身亡為止。
約瑟夫環問題python解法
約瑟夫環問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到k的那個人被殺掉;他的下一個人又從1開始報數,數到k的那個人又被殺掉;依此規
約瑟夫問題及變形:poj 1012
約瑟夫問題是個有名的問題:N個人圍成一圈,從第一個開始報數,第M個將被殺掉,最後剩下一個,其餘人都將被殺掉。例如N=6,M=5,被殺掉的順序是:5,4,6,2,3,1。 給定N個人和m,計算最後獲救者的編號,求解的思路是一種遞推思
小朋友學資料結構(1):約瑟夫環的連結串列解法、陣列解法和數學公式解法
約瑟夫環(Josephus)問題是由古羅馬的史學家約瑟夫(Josephus)提出的,他參加並記錄了公元66—70年猶太人反抗羅馬的起義。約瑟夫作為一個將軍,設法守住了裘達伯特城達47天之久,在城市淪陷之後,他和40名死硬的將士在附近的一個洞穴中避難。在那裡,這些
對於約瑟夫環的數學解法的理解
寒假的時候看到了約瑟夫環的數學解法,感覺很厲害,不過一直沒有機會再進一步的看一看它的證明,今天下午有時間了,我就闡述一下我的理解 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
經典演算法--約瑟夫環問題的三種解法
約瑟夫環問題,這是一個很經典演算法,處理的關鍵是:偽連結串列問題描述:N個人圍成一圈,從第一個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈;如此往復,直到所有人出圈。(模擬此過程,輸出出圈的人的序號)在資料結構與演算法書上,這個是用連結串列解決的。我感
LA3882(約瑟夫問題及變形)
我相信大家早就瞭解了約瑟夫問題 如小學的 猴子選大王:一堆猴子都有編號,編號是1,2,3 ...m,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數,每數到第N個,該猴子就要離開此圈,這樣依次
迴圈連結串列(約瑟夫環)的建立及C語言實現
連結串列的使用,還可以把連結串列的兩頭連線,形成了一個環狀連結串列,稱為迴圈連結串列。和它名字的表意一樣,只需要將表中最後一個結點的指標指向頭結點,就形成了一個環。 圖1 迴圈連結串列 迴圈連結串列和動態連結串列相比,唯一的不同就是迴圈連結串列首尾相連,其他都完全一
約瑟夫環(數學高效率解法,很詳細)
5.5.4 用數學方法解約瑟夫環(1) 原文copy:http://book.51cto.com/art/201403/433941.htm 5.5.4 用數學方法解約瑟夫環(1) 上面編寫的解約瑟夫環的程式模擬了整個報數的過程,程式執行時間還可以接受,很快就可
資料結構---連結串列及約瑟夫環問題帶來的思考
連結串列和陣列一樣也是線性表的一種。和陣列不同,它不需要再記憶體中開闢連續的空間。 連結串列通過指標將一組零散的記憶體塊連線在一起。我們把記憶體塊稱為連結串列的“結點”(是節點還是結點,結點連線起來打個結所以叫“結點”?開個玩笑),也就是說這些結點可以在記憶體的任意地方,只要有其他的結點的指標指向這個位置就可
用C++實現約瑟夫環的問題
content 人在 -h tel padding next family bsp sun 約瑟夫問題是個有名的問題:N個人圍成一圈。從第一個開始報數,第M個將被殺掉,最後剩下一個,其余人都將被殺掉。比如N=6,M=5。被殺掉的人的序號為5,4,6。2。3。最後剩下1
C++:順序表類實現約瑟夫問題_密碼不同
class josephus main clu 定義 void seq esp while //.h #pragma once#include <iostream>using namespace std;#define MAXSIZE 100 template
[51nod1073]約瑟夫環
成了 out namespace include 結果 div sin cin 比較 解題關鍵:此題不需要模擬,可以用數學方法解決。 無論是用鏈表實現還是用數組實現都有一個共同點:要模擬整個遊戲過程,不僅程序寫起來比較煩,而且時間復雜度高達O(nm),當n,m非常大(例如
51nod 1073約瑟夫環 遞歸公式法
tar con for names 問題 print 第一個 描述 span 約瑟夫環問題的原來描述為,設有編號為1,2,……,n的n(n>0)個人圍成一個圈,從第1個人開始報數,報到m時停止報數,報m的人出圈,再從他的下一個人起重新報數,報到m時停止報數,報m的出圈