c# - 如何检查数组中的所有概率

标签 c# arrays algorithm linq

例如我们有一个整数数组

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/

相关文章:

c# - 生产项目的代码指标(C#、Visual Studio)的常用值

c# - 如何刷新或刷新 C# Windows 窗体?

algorithm - 如何使用后缀求解一个简单的线性方程

java - 在二维数组中查找数字的对角线?

java - 数组对象的数组

c++ - 为回文遍历网格

java - 数组递归

c# - EntityFramework 未使用默认值更新列

c# - 使用 AsyncFileUpload 控件裁剪图像的代码

Java 数组写/读操作