猴子選大王——CSharp陣列
阿新 • • 發佈:2019-01-04
部落格上看了一個問題——猴子選大王
看得有些暈暈乎乎的,我就嘗試自己寫個方法備忘,謝謝
原題引述:
一群猴子,編號是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只咯。