- 描述
- 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
- 输入
- 每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:
0 0
- 输出
- 对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
- 样例输入
6 212 48 30 0
- 样例输出
517
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int n = sc.nextInt(); int m = sc.nextInt(); if(n==0&&m==0) break; else{ List<Integer>list = new ArrayList<Integer>(); for(int i = 1;i <= n;i++) { list.add(i); } int p = 0; int k=1; while(list.size() > 1){ if(p % m == 0){ int q = (k + m - 2) % list.size(); list.remove(q); p = 0; k = q + 1; } p ++; } System.out.println(list.get(0)); } } } }