• 关于约瑟夫环算法,数组解决


    据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

    下面 java代码实现算法

    package com.gh.p8;
    
    /**
     * Created by Lenovo on 2014/12/4.
     */
    public class P8_2 {
        static final int NUM=41;
        static final int KILL_NUM=3;
        static void josephus(int alive){
            int pos=-1;
            int[] man=new int[NUM];
            int count=1;
            int i=0;
            while (count<=(NUM-alive)){
                do {
                    pos=(pos+1)%NUM;
                    if (man[pos]==0){
                        i++;
                    }
                    if (i==KILL_NUM){
                        i=0;
                        break;
                    }
                }while (true);
                man[pos]=count;
                count++;
            }
            for (int j = 0; j < man.length; j++) {
                System.out.println(man[j]);
            }
        }
    
        public static void main(String[] args){
            josephus(3);
        }
    
    }
  • 相关阅读:
    软件工程第二次作业
    第一次作业
    理论物理特训-02
    左神-06 二叉树
    哲学通论之人-05(end)
    哲学通论之人-04
    左神-05 二分搜索(多看几遍)
    哲学通论之人-01
    航空母舰-04(end)
    题解 P3126 【[USACO15OPEN]回文的路径Palindromic Paths】
  • 原文地址:https://www.cnblogs.com/guhao123/p/4143341.html
Copyright © 2020-2023  润新知