LINQ查询以获取最大为N的所有数字(正数和负数),其总和为数字K

Linq query to get all numbers (positive and negative) up to N that sum up to number K(LINQ查询以获取最大为N的所有数字(正数和负数),其总和为数字K)

本文介绍了LINQ查询以获取最大为N的所有数字(正数和负数),其总和为数字K的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个特定的任务,要创建一个仅使用LINQ的函数,这就是它对我具有挑战性的原因。 问题类似于:

生成N个数字的加(+-)加和为K的所有表达式 举个例子,如果我有N=3,K=0。在某个点上,我应该有8个带正负(n组合的2次方)的数字组合,并且使用一些WHERE子句,我应该只提取那些总和为0(即K)的数字。 因此,结果应该类似于:

-1-2+3=0;

+1+2-3=0;

再说一次,我只能使用LINQ查询,不能使用其他查询,而且我不能完全理解这个问题。有人能帮忙吗?

推荐答案

感谢任何试图提供帮助的人,不幸的是,对于此问题而言,所有解决方案都太复杂,因此我设法找到了我自己的解决方案,它稍微简单一些,但您的解决方案将我引导到了正确的方向。

IEnumerable<string> seed = new[] { "" };

var x = Enumerable.Range(0, n).Aggregate(seed, (a, _) => a.
        SelectMany(s => new[] { s + "+", s + "-" }));

return x.Select((a) => a.Select((a, b) => a == '+' ? b + 1 : (b + 1) * -1))
.Where(r => r.Sum() == k);

这篇关于LINQ查询以获取最大为N的所有数字(正数和负数),其总和为数字K的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:LINQ查询以获取最大为N的所有数字(正数和负数),其总和为数字K

基础教程推荐