约瑟夫环的故事
據說著名猶太歷史學家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("約瑟夫環問題:\n"+ "據說著名猶太歷史學家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] + "號出局了!\n\n");Console.WriteLine("\n\n");people[i] = 0;counter = 0;}if (people[i]!=0){Console.WriteLine("當前總人數" + left + "\t" + "當前報數者:" + (i + 1) + "\n");}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("\t[" + people[i] + "]" );}Console.WriteLine();}} }故事完畢!
轉載于:https://www.cnblogs.com/fenqinearl/p/10910441.html
總結
- 上一篇: leetcode102
- 下一篇: acwing 7 混合背包