约瑟夫环问题:
n个人围成一圈,从某个人开始报数,数到m的人出列,接着从出列的下一个人报数,数到m再次出列,如此循环往复,直到所有人出列,顺序输出。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Demo_01{class Program{private static int[] Joseph(int total,int start,int interval ){int k = 0;int[] Count = new int[total+1 ]; //按出列顺序存储数据int[] Dock = new int[total+ 1 ]; //按顺序存储原始数据for (int i = 0; i < total; i++){Dock[i] = i;}for (int i = total; i >= 2; i--){start = (start + interval - 1) % i;if (start == 0)start = i;Count[k++] = Dock[start];for (int j = start + 1; j <= i; j++){Dock[j - 1] = Dock[j];}}Count[k] = Dock[1];return Count;}static void Main(string[] args){int[] demo = Joseph(22, 3, 4);foreach (int i in demo){Console.WriteLine(\"----------\"+i);}Console.ReadLine();}}}
————————————————————————————————
这个问题很经典,思路非常多,这种写法是比较常见的C#数组类型来做
很多人也已经写过这些东西了,我写这个只是记录一下吧(* ^ *)。