问:对给定的两个正整数n和m,编号为1 - n的n个人围坐一圈,从1号起连续报数,报道m者出局。剩下的人从当前位置开始从1起报数,报道m者出局......循环往复,直至剩下最后一个人。问出局者顺序如何?剩下者的原始编号是几?剩下者的原始编号是几?例如,n=6,m=5时,该过程出局者顺序为5,4,6,2,3,剩下者的原始编号为1。
代码:
public class test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入n为:");
int n = scan.nextInt();
System.out.print("请输入m为:");
int m = scan.nextInt();
int num[] = new int[n+1];
num[0] = 0;
//获得数字,使数字与数组下标一致
for (int i = 1; i < n+1; i++) {
num[i]=i;
}
int count = 1;//作为num数组下标数
int number = 1;//作为数组里的数,,,,,看作报的数
int t = 0;//有n个数,出局次数也为n,用t记数次数
//当t==n时,代表所有数出局
while (t!=n) {
//当count下标数大于n使从1开始记起
if (count>n) {
count = 1;
}
//如果数组里的值为-1,表示那个数已经出局
if (num[count]!=-1) {
if (num[count]==m) {
num[count]=-1;//找到的数赋值为-1,出局
number = 1;
t++;
System.out.println("输出第"+t+"出局的数:"+count);//输出count下标,即出局数字
}else{
//不等于m的赋值为number,number与报数的顺序同步,当number==m即num[count]==m时,其下标count就是出局的数
num[count] = number;
number++;
}
}
count++;
}
}
}