帮忙做一道编程题目

来源:百度知道 编辑:UC知道 时间:2024/06/02 03:07:54
设n个人围坐在一个圆桌周围,现在从第1个人开始报数,数到第m个人,让他出

局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,

如此反复直到所有的人全部出局为止。 编程,求出这n个人的出局序列。例如n

= 9, m = 5时, 出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。

public class Test{
public static void main(String[] args) {
int n=10;//总人数。
int m=3;//报到m的人出圈。
int[] a=new int[n];
int len=n;//圈中当前的人数。
for(int i=0;i<a.length;i++){
a[i]=i+1;
}
int i=0,j=1;//用i去找到每一个元素,作为元素下标;
//j代表当前要报的数。
while(len>0){
if(a[i%n]>0){
if(j%m==0){//表示找到要出圈的人。
System.out.println(a[i%n]+" ");
a[i%n]=-1;//将出圈后的相应位置上置-1。
j=1;//报数重新从1开始。
i++;
len--;//圈中人数减1。
}
else{//满足a[i%n]>0,但不满足j%m==0的情况。
//该位有人,但所报的数不是m的整数倍。
i++;
j++;
}
}else{//不满足a[i%n]>0的情况。(遇到空位了)
i++;//跳到下一位,但j不自加(该位不报数)
}
}
}
}