• 约瑟夫环问题


    待学习

    https://blog.csdn.net/weixin_38214171/article/details/80352921

    package com.heima.test;
    
    import java.util.ArrayList;
    
    public class 约瑟夫环 {
        /*
         * 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,
         * 39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,
         * 然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过)
         * 并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
         * 问题是,给定了和,一开始要站在什么地方才能避免被处决?
         * Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏
         * 
         */
        public static void main(String[] args) {
            System.out.println(getLuckyNum(8));
        }
        public static int getLuckyNum(int num) {
            //创建集合存储1到num的对象
            ArrayList<Integer> list = new ArrayList<Integer>();
            for (int i = 1; i <= num; i++) {
                list.add(i);
            }        
            
            int count = 1;//计数,3的倍数就删掉
            for(int i = 0; list.size() != 1;i++) { //集合数量大于1 ,就要继续执行
                if(i == list.size()) { //当i增长到集合最大的索引时,将i置零,重头再来
                    i=0;
                }
                
                if( count % 3 == 0) {
                    list.remove(i--);
                }
                
                count++;
            }
            return list.get(0); 
        }
    }
  • 相关阅读:
    《安富莱嵌入式周报》第222期:2021.07.19--2021.07.25
    嵌入式新闻早班车-第14期
    状态压缩动态规划【DP】
    Spring事务
    设计模式--组合模式
    设计模式--状态模式
    设计模式--中介者模式
    设计模式--责任链模式
    设计模式--享元模式
    设计模式--委派模式
  • 原文地址:https://www.cnblogs.com/gaoyang666/p/11605218.html
Copyright © 2020-2023  润新知