例如我们有一个整数数组
private int[] arr = new[] {10,5,5,6,4,5,7,3,8,2 };
我们有一把 key
private key =1;
该目标被罚款满足以下规则的所有可能性:
key+[索引列表] = 11;
例如输出应该是这样的:
[0] - [1],[2] - [1],[5] - [2],[5] - [1],[7],[9] - [8],[9]
更清楚地说,我们想以适当的方式对所有索引组合进行罚款;
key+arr[0]=11;
key+arr[1]+arr[2] =11;
key+arr[1]+arr[5]=11;
key+arr[1]+arr[7]+arr[9]=11;
首先我尝试了 LinQ 方式,但没有机会! 其次,我尝试用*算法来处理这个问题,但我没有运气。 然后我尝试通过递归调用来执行此操作,但再次没有正确的结果。
我知道这并不复杂,我希望自己能在 15 分钟内完成。但我真的被困在这里了。
感谢任何帮助。
最佳答案
你 friend 的递归,这里有一个例子可以把你推向正确的方向。加入胡椒粉和盐调味
public static IEnumerable<string> GetCombinations(int[] set, int sum, string values)
{
for (int i = 0; i < set.Length; i++)
{
int left = sum - set[i];
string vals = set[i] + "," + values;
if (left == 0)
{
yield return vals;
}
else
{
int[] possible = set.Take(i).Where(n => n <= sum).ToArray();
if (possible.Length > 0)
{
foreach (string s in GetCombinations(possible, left, vals))
{
yield return s;
}
}
}
}
}
用法
private int[] arr = new[] {10,5,5,6,4,5,7,3,8,2 };
foreach (string s in GetCombinations(arr, 18, ""))
{
Console.WriteLine(s);
}
关于c# - 如何检查数组中的所有概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48683913/