约瑟夫环
问题描述:
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
输入:两个整数n,m,如上所述。
输出:出列人的编号
代码:
import java.util.Scanner;
public class Joseph {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(),m = sc.nextInt(); // n为人数,数到m出局
sc.close();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
int num = n;
int count = 0;
while(num > 0){
for (int i = 0; i < num; i++) {
count++;
if(count == m){
System.out.print((arr[i]+1)+" ");
for (int j = i; j < arr.length-1; j++) {
arr[j] = arr[j+1];
}
count = 0;num--;i--;
}
}
}
}
}
结果: