使用+和-C#的数字的所有组合 [英] All combination for a number using + and - C#

查看:64
本文介绍了使用+和-C#的数字的所有组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想采用一种递归方法,以使用+/-(例如特定长度)来查找数字的所有可能组合:输入:

I want to make a recursive method to find all the possible combination for a number using +/-, with a specific length for example: For input:

  • 长度:6
  • 数量:3

对于输出:

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

您能为我解释一下我该怎么做吗?谢谢.

Can you explain for me how can I do that ? Thanks you.

推荐答案

嗯,假设所有组合"必须从 1 ( 1、2、3,...,n )开始的自然数生成:

Well, assuming that "all combinations" must be generated from consequent natural numbers starting from 1 (1, 2, 3, ..., n) you can implement something like this:

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

这篇关于使用+和-C#的数字的所有组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆