zoukankan      html  css  js  c++  java
  • 约瑟夫环的故事

    据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

    故事还原:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 约瑟夫环问题
    {
    
        public class Josephusring
        {
            public static int nums { get; set; } = 41;
            public static int[] people = new int[nums];
            private static int outpeople = 3;
            static void Main(string[] args)
            {
    
                Console.WriteLine("约瑟夫环问题:
    "+ "据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。");
                Josephusring j = new Josephusring();
                j.InitJosephusRing();
                j.Printf_Ring();
                int left = nums;
                int counter = 0;
                int i = 0;
                while (true)
                {
                    if (people[i] > 0)
                    {
                        counter++;
                    }
                    if (counter == outpeople)
                    {
                        left--;
                        Console.WriteLine(people[i] + "号出局了!
    
    ");
                        Console.WriteLine("
    
    ");
                        people[i] = 0;
                        counter = 0;
                    }
    
                    if (people[i]!=0)
                    {
                        Console.WriteLine("当前总人数" + left + "	" + "当前报数者:" + (i + 1) + "
    ");
                    }
                    j.Printf_Ring();
                    if (left <= 2)
                    {
                        break;
                    }
                    i++;
                    if (i == nums)
                    {
                        i = 0;
                    }
                }
                Console.WriteLine("Gameover!!!");
            }
            public void InitJosephusRing()
            {
                for (int i = 0; i < nums; i++)
                {
                    people[i] = i + 1;
                }
            }
    
            public void Printf_Ring()
            {
                for (int i = 0; i < nums; i++)
                {
                    Console.Write("	[" + people[i] + "]" );
                }
                Console.WriteLine();
            }
        }
    }

    故事完毕!

  • 相关阅读:
    java--Compara比较字符串排序(引用类型都可以)
    java---递归遍历文件
    java 增强for循坏遍历set 集合嵌套
    java-手写实现map
    ajax请求拿到多条数据拼接显示在页面中
    ajax取到数据后如何拿到data.data中的属性值
    .NET CORE IIS 500.21
    ConfigurationErrorsException: Unrecognized configuration section system.data.
    关于ajax中return并不能作为方法的返回值
    .net core 的跨域
  • 原文地址:https://www.cnblogs.com/fenqinearl/p/10910441.html
Copyright © 2011-2022 走看看