约瑟夫出圈问题

    技术2022-05-12  11

           设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。下面要解决的问题是:对于任意给定的n, sm,求出这n个人的出局序列。使用递归法解决这个问题。

     

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication10 { class Program { static void kick(int n,int m,int s) { int[] a = new int[n]; for (int i = 0; i < a.Length; i++) { a[i] = i + 1; } int count = 0; int count1 = 0; biaoji: for (int j = 0; j < a.Length; j++) { for (int i = s-1; i < a.Length; i++) { if (i == a.Length) { i = -1; } if (a[i] != 0) { count++; } if (count==m) { Console.WriteLine("下一个:"); Console.WriteLine(a[i]); count1++; a[i]=0; count=0; } if (count1 == a.Length) { goto biaoji; } } } } static void Main(string[] args) { biaoji1: int n, m,s; Console.WriteLine("请输入人数|出圈数|起始报数者:"); n = Convert.ToInt32(Console.ReadLine()); m = Convert.ToInt32(Console.ReadLine()); s = Convert.ToInt32(Console.ReadLine()); if (n <= 0 || m <= 0||s<=0) { Console.WriteLine("请输入正确的人数或出圈数!/n"); //Console.ReadKey(); //return; goto biaoji1; } kick(n, m,s); Console.ReadKey(); } } }


    最新回复(0)