时间限制:1000ms 空间限制:131072K
有 n 个小朋友做游戏,他们的编号分别是 1,2,3…n1,2,3…n。他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 1 报数,依次按照顺时针方向报数 (加一),报 mm 的人会离开队伍,然后下一个小朋友会继续从 1 开始报数,直到只剩一个小朋友为止。
输入格式
第一行输入两个整数,nn,mm。(1 \leq n,m \leq 10001≤n,m≤1000)
输出格式
输出最后一个小朋友的编号,占一行。
样例输入
10 5
样例输出
3
实现
package www.jisuanke.ds;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/**
* @author wangchong
* @date 2019/5/3 17:11
* @email 876459397@qq.com
* @CSDN https://blog.csdn.net/wfcn_zyq
* @describe
*/
public class Code_09_QueueKid {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < n; i++) {
arrayList.add(i + 1);
}
int index = 0;
int zeroNum = 0;
for (int i = 0; i < n; i++) {
while (arrayList.get(i) == 0) {
i++;
if (i == n) {
i = 0;
}
}
index++;
if (index % m == 0) {
arrayList.set(i,0);
zeroNum++;
index = 0;
if (zeroNum == n - 1) {
break;
}
}
if (i == n - 1) {
i = -1;
}
}
for (int i : arrayList
) {
if (i != 0) {
System.out.println(i);
}
}
}
}