gpt4 book ai didi

c# - 生成所有可能的组合

转载 作者:IT王子 更新时间:2023-10-29 03:43:55 27 4
gpt4 key购买 nike

给定 2 个数组 Array1 = {a,b,c...n}Array2 = {10,20,15....x}如何将所有可能的组合生成为字符串 a(i) b(j) c(k) n(p)
在哪里

1 <= i <= 10,  1 <= j <= 20 , 1 <= k <= 15,  .... 1 <= p <= x

如:
a1 b1 c1 .... n1  
a1 b1 c1..... n2
......
......
a10 b20 c15 nx (last combination)

所以在所有组合总数= array2 =
(10 X 20 X 15 X ..X x)
元素的乘积

类似于笛卡尔积,其中第二个数组定义了第一个数组中每个元素的上限。

固定数字的例子,
    Array x =  [a,b,c]
Array y = [3,2,4]

所以我们将有 3*2*4 = 24 种组合。结果应该是:
    a1 b1 c1  
a1 b1 c2
a1 b1 c3
a1 b1 c4

a1 b2 c1
a1 b2 c2
a1 b2 c3
a1 b2 c4


a2 b1 c1
a2 b1 c2
a2 b1 c3
a2 b1 c4

a2 b2 c1
a2 b2 c2
a2 b2 c3
a2 b2 c4


a3 b1 c1
a3 b1 c2
a3 b1 c3
a3 b1 c4

a3 b2 c1
a3 b2 c2
a3 b2 c3
a3 b2 c4 (last)

最佳答案

using System;
using System.Text;

public static string[] GenerateCombinations(string[] Array1, int[] Array2)
{
if(Array1 == null) throw new ArgumentNullException("Array1");
if(Array2 == null) throw new ArgumentNullException("Array2");
if(Array1.Length != Array2.Length)
throw new ArgumentException("Must be the same size as Array1.", "Array2");

if(Array1.Length == 0)
return new string[0];

int outputSize = 1;
var current = new int[Array1.Length];
for(int i = 0; i < current.Length; ++i)
{
if(Array2[i] < 1)
throw new ArgumentException("Contains invalid values.", "Array2");
if(Array1[i] == null)
throw new ArgumentException("Contains null values.", "Array1");
outputSize *= Array2[i];
current[i] = 1;
}

var result = new string[outputSize];
for(int i = 0; i < outputSize; ++i)
{
var sb = new StringBuilder();
for(int j = 0; j < current.Length; ++j)
{
sb.Append(Array1[j]);
sb.Append(current[j].ToString());
if(j != current.Length - 1)
sb.Append(' ');
}
result[i] = sb.ToString();
int incrementIndex = current.Length - 1;
while(incrementIndex >= 0 && current[incrementIndex] == Array2[incrementIndex])
{
current[incrementIndex] = 1;
--incrementIndex;
}
if(incrementIndex >= 0)
++current[incrementIndex];
}
return result;
}

关于c# - 生成所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3093622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com