※ 引述《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)
討論串 (同標題文章)