JAVA求解約瑟夫環

2021-06-25 14:07:52 字數 979 閱讀 9468

與前面我們介紹的大多數程式問題一樣,約瑟夫環問題也是來自於乙個故事。

這個故事發生在乙個名叫約瑟夫的猶太人身上,據說在羅馬人占領喬塔帕特後,39 個猶太人與約瑟夫及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人 開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。

但是,但是,哈哈,這個時候人性的自私就出現了,約瑟夫和他的朋友都不想死,怎麼辦呢?這個時候,約瑟夫想到了乙個問題,這樣一直迴圈下來,肯定是有3個人堅持到最後的,那麼只要保證自己和朋友在最後三個人中就行了,還要保證最後乙個需要自殺的是另外的乙個人?如何保證呢?經過計算,約瑟夫發現,如果自己和朋友分別站在第16個位置和第31個位置,就會避免自殺的命運。

但是,你知道這是怎麼計算出來的麼?今天,我們就讓程式幫我們解決這個問題。

通用型的約瑟夫環問題的描述是:由n個人圍成乙個圈,從k個人開始報數,到m值出圈,然後再從1開始報數,到m出圈,一直到所有人都出圈。

2.1 一群人圍在一起坐成環狀(如:n)

2.2 從某個編號開始報數(如:k)

2.4 一直迴圈,直到所有人出列,約瑟夫環結束

在描述中,我們已經清晰了解到了整個程式的執行流程,已經類似於偽**,這裡我們直接寫出**,不再寫偽**了,大家見諒。

public class josephus  

} while(true);

man[pos] = count;

} return man;

}public static void main(string args)

system.out.println();

}}

在眾多的程式設計問題中,很多都來自於數學遊戲,而數學是電腦科學的基礎工程。大家如果想學習一些常用的演算法,可以去找找這樣類似的書籍看看,自己親自動手敲一下,相信會有很大的提高。

數學使人周密,祝大家學習愉快。

使用單鏈表求解約瑟夫環問題

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。單鏈表參考 約瑟夫環運作如下 1 一群人圍在一起坐成環狀...

兩種方法求解 約瑟夫環

題目描述 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為0的人開始報數,數到2的那個人出列 他的下乙個人又從0開始報數,數到2的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。解法一 基於陣列實現 public void solution int totalnum,...

用迴圈佇列求解約瑟夫環問題

用迴圈佇列求解約瑟夫環問題普通形式求解 對比分析 設有n個人站成一圈,其編號為1 n。從編號為1的人開始按順時針方向1 2 迴圈報數,數到m的人出列,然後從出列者的下乙個人重新開始報數,數到m的人又出列,如此重複進行,直到n個人都出列為止。要求輸出這n個人的出列順序。例子展示 當n 5,m 2時的約...