【问题标题】:C# subtract list from number in all possible ways so the resultant number is bigger than 0C# 以所有可能的方式从数字中减去列表,因此结果数字大于 0
【发布时间】:2015-06-17 19:43:53
【问题描述】:

我需要从一个数字中减去列表,因此结果数字将等于或大于 0,并且结果可能是最小的。我还需要查看列表中的哪些项目被减去。

int a = 10;
List<int> list = new List<int>();

我已经尝试过了(可能是个坏主意):

for (int c = 0; c < list.Count; c++)
{
    if (a > 0)
    {
        a = a - list.ElementAt(c);

        if (a < 0)
        {
            a = a + list.ElementAt(c);
        }
        else
        {
            Console.Write("{0}", list.ElementAt(c));
        }
    }
}

但问题是它仅以一种方式减去并且没有找到最佳选择。

感谢您的任何想法。

【问题讨论】:

  • 你能举个例子吗?
  • 您的意思是要检索列表的子集,使其总和尽可能大,同时不大于给定的数字?
  • 我认为OP希望从给定值中减去每个列表项后可能的最小结果,结果应该大于或等于0
  • 因此,例如,如果列表有{13, 12, 11, 9},并且给出的数字是10,那么结果应该是1
  • 听起来像是 0-1 背包问题的变体...背包容量是a,整数列表是物品,我们正在挑选一组物品,试图在不增加重量的情况下最大化重量超出最大容量

标签: c# list subtraction


【解决方案1】:

我相信 OP 正在寻找减法后可能的最小结果,但该结果必须大于或等于零。

例如,在{13, 12, 11, 9} 和给定数字为10 的情况下,每个列表项减法后的结果应分别为{3,2,1,-1},在这种情况下,最终结果应为1,因为它是最小值值,但大于或等于零。

在这种情况下,代码可能如下所示:

int a = 10;
List<int> list = new List<int> {13, 12, 11, 9};


int min = -1;
for (int c = 0; c < list.Count; c++)
{
    int tempResult = list[c] - a;
    if (tempResult >= 0)
    {
        min = tempResult;
    }
}

Console.WriteLine(min);

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2022-11-25
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多