约瑟夫环问题C#递归解法

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1]  结果+1即为原问题的解。

上代码:

   /// 
    /// 約瑟夫環問題
    /// 
    class YuSheFuHuanWenTIi
    {
        public static void Find(List list, int k, int m)
        {
            if (list.Count > 0 && k <= list.Count)
            {
                int index = 0;

                while (index != m)
                {
                    index++;
                    if (k == list.Count)
                    {
                        k = 0;
                    }
                    k++;
                    if (k == list.Count)
                    {
                        k = 0;
                    }
                    if (index == m)
                    {
                        if (list.Count == 1)
                        {
                            Console.WriteLine(list[k]);
                        }
                        Console.WriteLine(list[k]);
                        list.RemoveAt(k);
                        index = m;
                        YuSheFuHuanWenTIi.Find(list, k, m);
                    }
                }
            }
        }
    }

 

你可能感兴趣的:(约瑟夫环问题C#递归解法)