zoukankan      html  css  js  c++  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);   //删除指定位置的元素                           
                }                                                 
            }                                                     
        }                                                         
    }                                                             
  • 相关阅读:
    go语言之goroute协程
    Vue中Computed和Watch的用法及区别
    php判断复选框是否被选中的方法
    基于workerman的实时推送
    织梦引入公共模板
    织梦快速建站首页模板
    golang解决中文乱码的方法
    Vue项目中使用可视化图表echarts
    解决for循环中异步请求顺序不一致的问题
    layui多图上传实现删除功能的方法
  • 原文地址:https://www.cnblogs.com/tjlgdx/p/5886844.html
Copyright © 2011-2022 走看看