约瑟夫问题 java

约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列

知识补充:

List接口主要有两个实现类,ArrayList和LinkedList类。在List集合中允许出现重复的元素,与Set集合不同的是,List集合中的元素都是有序的,可以根据索引位置来检索List集合中的元素,第一个被添加进来的元素的索引为0,第二个为1,依次类推

import java.util.ArrayList;                                    
import java.util.List;                                        
import java.util.Scanner;                                     
                                                              
public class Test{                                            
    public static void main(String[] args) {                  
        Scanner scanner = new Scanner(System.in);             
        System.out.print("请输入总人数:");                   
        int totalNum = scanner.nextInt();                     
        System.out.print("请输入报数的大小:");               
        int cycleNum = scanner.nextInt();                     
        yuesefu(totalNum, cycleNum);                          
    }                                                         
                                                              
   public static void yuesefu(int totalNum, int countNum) {   
        // 初始化人数                                         
        List<Integer> start = new ArrayList<Integer>();//创建List集合  ,且集合中存放的是整型  

      //正确的创建13个数的方法如下:

   // List<Integer> list=new ArrayList<Integer>(new Integer(13));   
        for (int i = 1; i <= totalNum; i++) {                 
            start.add(i);  //像集合中添加元素                                   
        }                                                     
        //从第K个开始计数                                     
        int k = 0;                                            
        while (start.size() >0) {                             
            k = k + countNum;                                 
            //数到m的人的索引位置                                 
            k = k % (start.size()) - 1; 
//            System.out.println(start.size());
           // 判断是否到队尾                                  
            if (k < 0) {                                      
                System.out.println(start.get(start.size()-1));
                System.out.println(3333);
                start.remove(start.size() - 1);               
                k = 0;                                        
            } else {                                          
                System.out.println(start.get(k));//通过索引获取所对应的值             
                start.remove(k);   //删除指定位置的元素                           
            }                                                 
        }                                                     
    }                                                         
}                                                             
原文地址:https://www.cnblogs.com/tjlgdx/p/5886844.html