1. 程式人生 > >猴子選大王——CSharp陣列

猴子選大王——CSharp陣列

部落格上看了一個問題——猴子選大王

看得有些暈暈乎乎的,我就嘗試自己寫個方法備忘,謝謝

原題引述:

一群猴子,編號是1,2,3 …n,這群猴子(n個)按照1至n的順序圍坐一圈。從第1只開始數,每數到第m個,該猴子就要離開此圈,這樣依次下來,最後一隻出圈的猴子為大王。輸入m和n,輸出猴子離開圈子的順序,從中也可以看出最後為大王是幾號猴子。 
要求採用陣列作為儲存結構完成。

程式碼如下:

        static void Main(string[] args)
        {
            getKing(23,123);
            Console.ReadKey();
        }
        public static void getKing(int m, int n)
        {
            int[] monkeys = new int[n];
            for (int i = 0; i < n; i++)
            {
                monkeys[i] = 0;
            }
            int index = 0;
            int time = 1;
            int sum = 1;
            while (time <= n)
            {
                if (monkeys[index % n] == 0 && sum % m == 0)
                {
                    monkeys[index % n] = 1;
                    Console.WriteLine("第{0}次出局的是:{1}", time, index % n + 1);
                    time++;
                    sum = 1;
                }
                if (monkeys[index % n] == 0)
                {
                    sum++;
                }
                index++;
            }
        }

其實感覺也沒用到陣列啥,簡單解釋一下程式碼。

建立一個數組monkeys[],一個需要多次遍歷陣列性質的變數index,輸出的次數time,出局後猴子們重新數數的變數sum。這幾個物件的建立無非是模擬猴子們選大王的情景。陣列monkeys[]圍成一個圓圈,從第一隻猴子開始數的時候index就伴隨著每隻猴子(包括出局的猴子),遇到報到m數且還沒出局的猴子就讓它出局,輸出time加1,只要沒有出局的猴子都參與報數,即sum++。

來測試一下吧,getKing(23,123)有123只猴子報數23時出局。


猴子大王就是第29只咯。