• Josephus问题--N个人通过循环报数决定存活者--基于数组的实现


    在这个问题中,N个人决定通过以下方式减少生存的人数,直至只剩下最后一人。
    他们围坐成一圈(位置记为0到N-1)并从第一个人开始从1报数,报到M的人会被杀死,然后从下一个存活的人又从1开始报数,直到最后一个人留下来。传说中Josephus找到了不会被杀死的位置。编写一个程序,从命令行接收N和M并打印出人们被kill的顺序,同时也找到了幸存者的位置。

    方法一 数组解法

    public class Josephus {
        public static void main(String[] args) {
            int N = Integer.parseInt(args[0]);
            int M = Integer.parseInt(args[1]);
    
            int[] people = new int[N];
            for (int i = 0; i < N; i++) {
                people[i]=i;
            }
            int dead = 0;//死亡人数标记
            int count = 1;//报数标记
            int index= 0;//数组下标标记
            boolean[] isKilled = new boolean[N];//是否被杀死标记,默认false
    
            //不断kill,直至死亡个数达到N-1
            while(dead<N-1) {
                if(count == M) {
                    isKilled[index] = true;
                    dead++;
                    System.out.println(people[index]);//输出被杀死的人的坐标
                    //从下一个存活者开始报数
                    index = (index+1)%N;
                    while (isKilled[index]){
                        index = (index+1)%N;
                    }
                    count = 1;
                }else {
                    //正常报数
                    index = (index+1)%N;
                    if(!isKilled[index]) {
                        count=count+1;
                    }
                }
            }
            //找到幸存者
            for (int i = 0; i < N; i++) {
                if(!isKilled[i])
                    System.out.println(people[i]);
            }
        }
    }
    

    命令行键入java Josephus 7 2
    得到 1 3 5 0 4 2 6

  • 相关阅读:
    大数据
    入门
    bootstrap
    django 实现
    django
    爬虫
    汇编指令
    JavaScript
    那些年踩过的坑
    实现网页代码
  • 原文地址:https://www.cnblogs.com/dwwzone/p/12859250.html
Copyright © 2020-2023  润新知