• 约瑟夫问题 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);   //删除指定位置的元素                           
                }                                                 
            }                                                     
        }                                                         
    }                                                             
  • 相关阅读:
    利用高斯金字塔制作图像显著图
    python实现图像高斯金字塔
    使用差分金字塔提取图像边缘 python实现
    使用色彩追踪和形态学运算得到图像中感兴趣区域
    图像掩膜讲解
    图像色彩追踪
    手动绘制方向梯度直方图(HOG)
    Zhang-Suen 图像细化算法python实现
    hilditch图像细化算法python实现
    P2256 一中校运会之百米跑
  • 原文地址:https://www.cnblogs.com/tjlgdx/p/5886844.html
Copyright © 2020-2023  润新知