約瑟夫問題的通用解決方案,用了隊列(jdk裏面的)
題目描述:n只猴子要選大王,選舉方法如下:所有猴子按 1,2 ……… n 編號並按照順序圍成一圈,從第 k 個猴子起,由1開始報數,報到m時,該猴子就跳出圈外,下一隻猴子再次由1開始報數,如此循環,直到圈內剩下一隻猴子時,這隻猴子就是大王。
import sun.misc.Queue;
/**
* @author: Dahai He
* @time: 2010-7-14 下午02:28:50
*/
public class Test{
public static void main(String[] args) {
//指定位置,在第幾個位置進行剔除
int M = 3;
//指定隊列的大小
int N = 10;
//初始化隊列
Queue q = new Queue();
//把成員壓入隊列
for (int i = 1; i <= N; i++){
q.enqueue(i);
}
//對隊列進行循環查找
try {
while (!q.isEmpty()) {
for (int i = 0; i < M - 1; i++){
//如果不是指定位置的元素,隊列頭直接去隊尾
q.enqueue(q.dequeue());
}
//把指定位置的元素提出隊列
System.out.println(q.dequeue() + " ");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}