Re: [問題] 一個遞迴問題

看板C_Sharp作者時間12年前 (2012/02/20 10:34), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《wildcupid (小漁歌)》之銘言: : 今天在寫一個想破腦袋還是寫不出來 : 希望有神人可以幫幫我 : 以下是一個小例子 : 假設有三堆東西 : 每一堆裡面的東西都不一樣且數量也不同 : 例如第一堆有 蘋果 橘子   :   第二堆有 芭樂  :   第三堆有 西瓜 檸檬 : (以上每堆中的水果都各一個) : 然後我現在想做的事情就是從每一堆中選一個水果出來 : 也就是想要求出所有的組合 : 所以會有 蘋果 芭樂 西瓜 :      蘋果 芭樂 檸檬 :     橘子 芭樂 西瓜 : 橘子 芭樂 檸檬 貼個不同的作法,不用遞迴的方式且支援動態的加入新的水果堆數 static void Main(string[] args) { // 不同種類的水果 var fruit = new List<string[]> { new[] {"a", "b", "c"}, new[] {"b", "c", "d","e"}, new[] {"a", "c", "e"}, new[] {"x", "b", "c","a"} }; // 全部的組合 var all = new List<string[]>(); var count = new int[fruit.Count]; bool run = true; while (run) { var o = new string[fruit.Count]; for (int i = 0; i < count.Length; i++) { if (count[i] > fruit[i].Length - 1) { if (i < fruit.Count - 1) { count[i + 1]++; count[i] = 0; } else { run = false; } } if (run) { o[i] = fruit[i][count[i]]; } } if (run) { all.Add(o); } count[0]++; } // 輸出所有組合 foreach (var array in all) { Console.WriteLine(String.Join(",", array)); } Console.ReadKey(); } 只是提出個不同的作法,試過是可行,原理就是用數字一直加一 把每一種組合都跑過 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.147.122 ※ 編輯: kinwind 來自: 60.250.147.122 (02/20 10:36)
文章代碼(AID): #1FGR5C31 (C_Sharp)
文章代碼(AID): #1FGR5C31 (C_Sharp)