• 约瑟夫问题


    package test;

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    //约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
    //从编号为k的人开始报数,数到m的那个人出列;
    //他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
    /**
     * 题目:有一个整型数组a[n]顺序存放0 ~ n-1,要求每隔两个数删掉一个数,
     * 到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。
    *
     */
    public class Yuesefu {
        public static void main(String[] args) {
            yue(10,3,1);//元素个数,间隔个数,开始位置
        }
        
        public static void yue(int total,int count,int no){
            HashMap<Integer,Object> map = new HashMap<>();
            ArrayList<Integer> list = new ArrayList<>();
            for(int i=1;i<total+1;i++){
                list.add(i);
                map.put(i,(int)(Math.random()*10));
            }
            System.out.println(list);
            int k = no-1 + count - 1;//删除元素的下标:首次下标+间隔 -1
            while(list.size() > 1){
                if(k > list.size()-1){//需要回环
                  k = k - (list.size()-1) -1;//计算下标
                }
                System.out.println(list.get(k));
                list.remove(k);
                k = k+count-1; //计算下标
                System.out.println(list);
            }
            Collection<Object> values = map.values();
            for (Object object : values) {
                System.out.print(object+"|");
            }
            System.out.println();
            System.out.println("原始下标:"+list.get(0)+" 值为:"+map.get(list.get(0)));
        }
        
    }

  • 相关阅读:
    二分图那套理论
    洛谷P4351 [CERC2015]Frightful Formula【组合计数】
    「AGC023E」Inversions【组合计数】
    类欧几里得算法及其拓展
    OLAP 一些扯淡
    auto vectorized case shift
    备忘录
    lambda function pointer
    C++ atomic
    gdb 使用了 O0 但是还是有 <optimized out>
  • 原文地址:https://www.cnblogs.com/caoyajun33-blog/p/7505800.html
Copyright © 2020-2023  润新知