【问题标题】:sum up an array of integers in C# [closed]在C#中总结一个整数数组[关闭]
【发布时间】:2016-03-15 10:05:26
【问题描述】:

我想要数组中数字的总和并且不超过1002,我该如何解决? 不需要将所有数字相加,只需将符合条件的数字相加即可

我是这样做的,但我认为这不是正确的方式

 List<int> list = new List<int> { 4, 900, 500, 498, 4 };
        int sum = list.Skip(2).Take(3).Sum();
        Console.WriteLine(sum);
        Console.ReadLine();

【问题讨论】:

  • 为什么是SkipTake?不知道你想在这里实现什么。
  • int sum = list.Where(x =&gt; x&lt; 1002).Sum();
  • 在您的测试代码中没有超过 1002 限制的值。那么你到底想达到什么目的呢?
  • 您想要所有不超过 1002 的数字的总和还是总和直到您有一个大于 1002 的数字?
  • 但是 4、900 和 500 不是已经超过了这个限制吗?还是您需要确切的值 1002?

标签: c#


【解决方案1】:

不清楚你想要什么......如果你想对一些数字求和,以便总和在达到 1002 时停止求和,你可以:

List<int> list = new List<int> { 4, 900, 500, 498, 4 };
var lst = list.Skip(2).Take(3);

int sum = 0;

foreach (int num in lst)
{
    int sum2 = sum + num;

    if (sum2 > 1002)
    {
        break;
    }

    sum = sum2;
}

Console.WriteLine(sum);

或者你可以

List<int> list = new List<int> { 4, 900, 500, 498, 4 };
var lst = list.Skip(2).Take(3);

int sum = 0;

foreach (int num in lst)
{
    sum += num;

    if (sum >= 1002)
    {
        break;
    }
}

Console.WriteLine(sum);

如果添加一个超过 1002 的数字,第一个将停止,而第二个将在达到 1002 后停止。

请注意,这两个都不能直接在 LINQ 中轻松完成。

【讨论】:

  • 但是,当总和应该恰好 1002 我认为 OP 需要时,这些方法都不会停止。
  • @HimBromBeere 如果他想解决knapsack problem 那是另一个问题:-)
  • 我认为 OP SkipTake 是解决问题的尝试。 P.S.:还有一些随机的knapsack problem solution.
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多