【问题标题】:All combination for a number using + and - C# [closed]使用 + 和 - C# 的数字的所有组合 [关闭]
【发布时间】:2021-05-29 15:40:12
【问题描述】:

我想创建一个递归方法来查找使用 +/- 的数字的所有可能组合,例如具有特定长度: 输入:

  • 长度:6
  • 数量:3

对于输出:

  • 1 + 2 + 3 - 4 - 5 + 6 = 3
  • 1 + 2 - 3 + 4 + 5 - 6 = 3
  • 1 - 2 - 3 - 4 + 5 + 6 = 3

你能解释一下我该怎么做吗? 谢谢你。

【问题讨论】:

  • 可能有无限种情况

标签: c# algorithm recursion


【解决方案1】:

好吧,假设“所有组合”必须从 1 (1, 2, 3, ..., n) 开始的自然数 生成,您可以实现如下所示:

using System.Linq;

...

// Here we generate all possible formulae and their sums:
// 1 - 2 - 3 - 4 - 5 - 6
// 1 - 2 - 3 - 4 - 5 + 6
// 1 - 2 - 3 - 4 + 5 - 6
// 1 - 2 - 3 - 4 + 5 + 6 
// ...
// 1 + 2 + 3 + 4 + 5 + 6
private static IEnumerable<(string formula, int sum)> GenerateRecursive(int number) {
  if (number == 1) 
    yield return ("1", 1);
  else
    foreach (var pair in GenerateRecursive(number - 1)) {
      yield return ($"{pair.formula} - {number}", pair.sum - number);
      yield return ($"{pair.formula} + {number}", pair.sum + number);
    }
}

// Here we query formulae generated for having required sum
private static IEnumerable<string> SolveFor(int target, int count) {
  return GenerateRecursive(count)
    .Where(item => item.sum == target)
    .Select(item => $"{item.formula} = {item.sum}");
}

然后

Console.Write(string.Join(Environment.NewLine, SolveFor(3, 6)));

结果:

1 - 2 - 3 - 4 + 5 + 6 = 3
1 + 2 - 3 + 4 + 5 - 6 = 3
1 + 2 + 3 - 4 - 5 + 6 = 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2012-04-26
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多