【发布时间】:2016-09-30 07:40:48
【问题描述】:
我在查找列表中最近的 sumElement 组合时遇到了一些问题。
例子:
这是我的清单:
list = {32183,15883,26917,25459,22757,25236,1657}
list.Sum = 150092
现在我要分开了
list.Sum / z
z = variable(user Input - in this example it's 3)
我得到了
50031
现在我想从 listElement summs 中找到最接近的数字。
最接近50031的是
32183 + 15883 = 48066
or
32183 + 15883 + 26917 = 74983
所以我选择 48066,接下来我想找到下一个元素,但我们必须跳过已经计数的元素(在这种情况下我必须跳过 32183 + 15883)
所以现在我们只能使用这些元素 26917,25459,22757,25236,1657(尚未计算)
26917 + 25459 = 52376
or
26917 + 25459 + 22757 = 75133
所以我选择52376
我们这样做 z(variable) 次
我们可以按这个顺序对元素求和,例如我们不能相加
32183 + 15883 + 1657
因为这个跳过了几个列表元素
我们可以对这种排序中的元素求和,但不能对列表进行排序。 我们不能这样做,因为这些数字是 .csv 文件中的行数,所以我必须按此顺序进行。
现在我有:
for (int i = 0; i < z; i++)
{
mid = suma/z ;
najbliższy = listSum.Aggregate((x, y) => Math.Abs(x - mid) < Math.Abs(y - mid) ? x : y);
}
它找到我第一个元素(正确),但我不知道如何正确循环它。所以我只有第一个元素,在这个例子中我需要 3 个。
谁能帮我完成这个?
【问题讨论】:
-
Closest number表示接近另一个的单个数。然而,您的代码试图找到最接近另一个的数字组合。请编辑您的标题和文字以说明您想要什么 -
你加在一起的数字在列表中总是相邻吗?还是可以有差距?
-
do list 有 n 项还是只有 7 项?
-
听起来像是
Knapsack problem的变体 -
重要:列表可以包含负数吗?如果没有,则有明显的优化。