约瑟夫环 java实现

问题:

N个人从1到N编号,围城一圈,从1开始报数, 数到X时,将X的编号输出,并将那个人踢出,
下一个从1再开始报数,直到所有人都出去

思路:

就是计数,移除,没有太深的思想,直接上代码:

[java]

  1. package test;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import java.util.Scanner;  
  6. /** 
  7.  * N个人从1到N编号,围城一圈, 
  8.  * 从1开始报数, 数到X时,将X的编号输出,并将那个人踢出, 
  9.  * 下一个从1再开始报数,直到所有人都出去 
  10.  * @author anjl 
  11.  * 
  12.  */  
  13. public class My_JosephCircle {  
  14.       
  15.     public static void main(String[] args) {  
  16.         List alist = new ArrayList();  
  17.           
  18.         System.out.println(“请输入约瑟夫环  中 总个数数:”);  
  19.         Scanner sca = new Scanner(System.in);  
  20.         int N = sca.nextInt();  
  21.         // 提示输入要出圈的数值  
  22.         System.out.println(“请输入要出圈的数值:”);  
  23.         int X = sca.nextInt();  
  24.         System.out.println(“按出圈的次序输出序号:”);  
  25.           
  26.         for(int i=0 ;i<N;i++){  
  27.             alist.add(i+1);  
  28.         }  
  29.           
  30.         int i=-1;  
  31.         int countX=0;  
  32.         while(alist.size()!=0){  
  33.             ++i;  
  34.             if(i== alist.size()){  
  35.                 i=0;  
  36.             }  
  37.             ++countX;  
  38.             if(countX==X){//输出  
  39.                 System.out.print(alist.get(i)+ ” “);  
  40.                 alist.remove(i);  
  41.                 countX=0;  
  42.                 i–;//修正  
  43.             }  
  44.         }  
  45.           
  46.     }  
  47. }  

 

测试结果:

标签