約瑟夫環問題

約瑟夫環是一個數學的應用問題:
已知16我的(以編號0,1,2...15分別表示)圍坐在一張圓桌周圍。從編號爲0的人開始報數(報數從1開始),數到3的倍數的那我的出列;直到圓桌剩下一個,請打印出每一個人出列的編號
 
C#非遞歸發實現

 static void Main(string[] args)
        {
            //保存移走的人的個數
            int RemoveCount = 0;
            //保存每一個人讀出的數字
            int ReadCount = 0;
            int[] personNum = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };遞歸

            while (true)
            {
                for (int i = 0; i < personNum.Length; i++)
                {
                    //表示沒有移除的數據
                    if (personNum[i] != -1)
                    {
                        //數字加1
                        ReadCount++;
                        if (ReadCount % 3 == 0)
                        {
                            //設置爲移除-1
                            Console.WriteLine(personNum[i]+"號移除");
                            personNum[i] = -1;
                            //移除的個數
                            RemoveCount++;
                            if (RemoveCount >= 16)
                            {
                                break;
                            }
                        }
                    }
                }
                if (RemoveCount >= 16)
                {
                    break;
                }
            }
            //最後輸出一個數字
            for (int i = 0; i < personNum.Length; i++)
            {
                if (personNum[i] != -1)
                {
                    Console.WriteLine("最後一我的原來的編號是"+personNum[i]);
                    break;數學

                }
            }
        }string

相關文章
相關標籤/搜索