题目描述
有m个人,其编号分别为1~m。按顺序围成一个圈,现在给定一个数n,从第一个人开始依次报数,报到n的人出圈,然后从下一个人开始,继续从1开始依次报数,报到n的人再出圈,…如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序。
输入
输入格式
一行两个正整数m和n,之间用一个空格隔开,1<=m<100,1<=n<=32767。
输出
输出格式
输出m行,每行一个正整数,表示依次出圈的人的编号。
输入样例
8 5
输出样例
5
2
8
7
1
4
6
3
import java.util.*;
import java.math.*;
import java.util.ArrayList;;
public class Main {
int m; //总人数
int n; //第几个出局
ArrayList<String> circle = new ArrayList <String>();
public Main(int m, int n) {
this.m = m;
this.n =n;
//初始化环
for (int i = 1; i <= m; i++) {
circle.add(String.valueOf(i));
}
}
public void doAction() {
ArrayList<String> temp = null;
int k = n;//计数
while (true) {
temp = (ArrayList<String>)circle.clone();
if (temp.size() == 1) {
System.out.println(temp.get(0)+"\n");//最后一个出局的人
break;
}
for (int i =0; i < temp.size(); i++) { //循环
k--;
if (k == 0) {
System.out.println(temp.get(i));//打印出局的人
circle.remove(temp.get(i)); //出局
k = n; //重新开始计数
}
}
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int men = sc.nextInt();
int k = sc.nextInt();
Main test = new Main(men,k);
test.doAction();
}
}