问题:
N个人从1到N编号,围城一圈,从1开始报数, 数到X时,将X的编号输出,并将那个人踢出,
下一个从1再开始报数,直到所有人都出去
思路:
就是计数,移除,没有太深的思想,直接上代码:
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* N个人从1到N编号,围城一圈,
* 从1开始报数, 数到X时,将X的编号输出,并将那个人踢出,
* 下一个从1再开始报数,直到所有人都出去
* @author anjl
*
*/
public class My_JosephCircle {
public static void main(String[] args) {
List alist = new ArrayList();
System.out.println("请输入约瑟夫环 中 总个数数:");
Scanner sca = new Scanner(System.in);
int N = sca.nextInt();
// 提示输入要出圈的数值
System.out.println("请输入要出圈的数值:");
int X = sca.nextInt();
System.out.println("按出圈的次序输出序号:");
for(int i=0 ;i<N;i++){
alist.add(i+1);
}
int i=-1;
int countX=0;
while(alist.size()!=0){
++i;
if(i== alist.size()){
i=0;
}
++countX;
if(countX==X){//输出
System.out.print(alist.get(i)+ " ");
alist.remove(i);
countX=0;
i--;//修正
}
}
}
}
测试结果: