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...