题目描述
设有 nn 个人围坐在圆桌周围,现从某个位置 kk 上的人开始报数,报数到 mm 的人就站出来。下一个人,即原来的第 m+1m+1 个位置上的人,又从 11 开始报数,再报数到 mm 的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这 nn 个人的出列顺序。
要求一:采用循环链表解决。
要求二:可以使用模拟法,模拟循环链表。
要求三:可以不使用循环链表类的定义使用方式。
输入描述
输入只有一行且为用空格隔开的三个正整数 n,k,mn,k,m,其含义如上所述。
输出描述
共 nn 行,表示这 nn 个人的出列顺序。
输入输出样例
示例 1
输入
3 5 8
输出
3
2
1
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n = scan.nextInt();//人
int k = scan.nextInt();//开始位置
int m = scan.nextInt();//出列
int[] arr = new int[n];
int num = n;
int count = 0;
int index = k-1;
for (int i = 0; i < n; i++) {
arr[i]=i+1;
}
while(count<n){
index = index + m - 1;
index = index % num;
System.out.println(arr[index]);
for(int i = index;i<num-1;i++){
arr[i]=arr[i+1];
}
num--;
count++;
}
scan.close();
}
}