約瑟夫演算法問題

2021-10-03 09:17:57 字數 1536 閱讀 4856

n 個人圍成一圈,從第乙個人開始報數,數到 m 的人出列,再由下乙個人重新從 1 開始報數,數到 m 的人再出圈,依次類推,直到所有的人都出圈,請輸出依次出圈人的編號。

輸入兩個整數 n,m。

輸出一行 n 個整數,按順序輸出每個出圈人的編號

1 ≤m

,n

≤100

1\leq m, n \leq 100

1≤m,n≤

100樣例

輸入10 3; 輸出3 6 9 2 7 1 8 5 10 4

**:(單鏈表、雙指標解法)

public

class

josepfu

if(personcount <=0)

circlelinklist linklist =

makecirclelist

(personcount)

; list

list =

newarraylist

(); listnode node = linklist.

head()

;while

(node != node.next)

list.

add(node.num)

;return list;

}/**

* 算上自己,移動m步

* @param node

* @param m

* @return

*/private listnode popnode

(listnode node,

int m)

for(

int i =

1; i < m; i++

) helpernode.next = node.next;

return node;

}private circlelinklist makecirclelist

(int personcount)

return circlelinklist;

}static

class

circlelinklist

public

void

add(listnode node)

else

}public listnode head()

public

void

printlist()

}public

intsize()

}static

class

listnode

}}

測試用例:
public

class

josepfutest

private josepfu.circlelinklist preparedata()

@test

public

void

testcirclelinklist()

}

約瑟夫問題o n 演算法

宣告 本文僅為個人查閱方便所轉,版權為原文作者 本演算法僅適用於找出最後的勝利者,而不是得到出列序列。此方法從考慮n 1個人中最終勝利者 最後乙個沒有出列的人是誰 遞推到n個人時最終勝利者是誰。但是並不能得到出列的序列。無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來...

演算法,約瑟夫問題

跟猴子問題比較相似,最後乙個是大王。約瑟夫是最後兩個是存活。約瑟夫問題是個有名的問題 n個人圍成一圈,從第乙個開始報數,第m個將被殺掉,最後剩下乙個,其餘人都將被殺掉。例如n 6,m 5,被殺掉的順序是 5,4,6,2,3,1。function getlasttwo else 輸出活著的人 fore...

演算法總結 約瑟夫問題

約瑟夫問題 有 只猴子,按順時針方向圍成一圈選大王 編號從 到 從第 號開始報數,一直數到 數到 的猴子退出圈外,剩下的猴子再接著從1開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸入 後,輸出最後猴王的編號。輸入資料 每行是用空格分開的兩個整數,第乙個是 n,第二個是 m...