26:約瑟夫問題
總時間限制:
1000ms
內存限制:
65536kB
描述
有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接着從1開始報數。就這樣,直到圈內只剩下一隻猴子時,這個猴子就是猴王,編程求輸入n,m後,輸出最後猴王的編號。
輸入
輸入包含兩個整數,第一個是n,第二個是m (0 < m,n <=300)。
輸出
輸出包含一行,即最後猴王的編號。
樣例輸入
12 4
樣例輸出
1
實現代碼如下:
import java.util.LinkedList;
import java.util.Scanner;
/**
* @author baikunlong
* @date 2020/6/23 10:33
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int p = scanner.nextInt();
LinkedList<Integer> list = new LinkedList<>();
for (int i = 0; i < n; i++) {
list.add(i + 1);
}
int cNum = 1;
int delIndex = 0;
while (list.size() != 1) {
if (cNum == p) {
// System.out.print(list.get(delIndex) + " ");
list.remove(delIndex);
cNum = 1;
if (delIndex>0) {
delIndex--;
} else {
delIndex = list.size()-1;
}
} else {
cNum++;
}
if (delIndex < list.size() - 1) {
delIndex++;
} else {
delIndex = 0;
}
}
System.out.print(list.get(0) + "");
}
}