首页 > 代码库 > 约瑟夫问题 java

约瑟夫问题 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);   //删除指定位置的元素                                       }                                                         }                                                         }                                                         }                                                             

 

约瑟夫问题 java