c#列表中值的总和

时间:2021-01-09 16:13:22

标签: c# algorithm


   int [] myList = {7, 11, 17, 5, 18, 6};

   int sum=0;

   a1 = value1(7);
   a2 = value1(7) + value2(11);
   a3 = value1(7) + value2(11) + value3(17);
   ....
   ....
   ....
   a6 = value1(7) + value2(11) + value3(17) + ... + value6(6);

   return sum = a1 + a2 + a3 + a4 + a5 + a6;
       

示例:

我有一个数组 --> [7, 11, 17, 5, 18, 6]

我必须为 sum 赋值。

sum 必须是 =

  7 +
  7 + 11 +
  7 + 11 + 17 +
  7 + 11 + 17 + 5 +
  7 + 11 + 17 + 5 + 18 +
  7 + 11 + 17 + 5 + 18 + 6 =

  (7*6 + 11*5 + 17*4 + 5*3 + 18*2 + 6) = 222

(注意,我不想要数组项的简单总和。) 我如何在 c# 上编码?

7 个答案:

答案 0 :(得分:4)

好吧,你有公式:

 sum = item[0] * Length + 
       item[1] * (Length - 1) + 
       ...
       item[i] * (Length - i) +
       ...
       item[Length - 1] * 1

为了实现它,你可以使用旧的 for 循环:

int sum = 0;

for (int i = 0; i < myList.Length; ++i)
  sum += myList[i] * (myList.Length - i);

或 Linq:

int sum = myList
  .Select((item, i) => item * (myList.Length - i))
  .Sum(); 

编辑:如果您想概括IEnuerable<int>我们不知道的解决方案LengthCount 你可以放 foreach 循环:

int sum = 0;
int prior = 0;

// Now myList can be int[] (array), List<int> (list)...
foreach (int item in myList) 
  sum += (prior += item);

答案 1 :(得分:2)

您可以使用linq

var totalLength = myList.Length;
var totalSum = myList.Select((m, index) => m * (totalLength  - index)).Sum();

另一种方式:

int sum = 0;
var cummulativeSum = myList.Select(m => { sum = sum + m; return sum;});
totalSum = cummulativeSum.Sum();

检查小提琴:https://dotnetfiddle.net/Q6s4OT

答案 2 :(得分:2)

using System.Linq;

int[] myList = {7, 11, 17, 5, 18, 6};
        
var sum = myList.Select((e, i) => e * (myList.Length - i)).Sum();

答案 3 :(得分:2)

int [] myList = {7,11,17,5,18,6};

var sum = 0;
for (var i = 0; i < myList.Length; i++)
{
    sum += myList[i] * (myList.Length - i);
}
Console.WriteLine(sum);

答案 4 :(得分:1)

        int[] myList = { 7, 11, 17, 5, 18, 6 };
        int sum = 0;

        for (int i=1; i<= myList.Length; i++)
        {
            Console.WriteLine($"{(myList.Length - i + 1)}*{myList[i-1]}");
            sum += (myList.Length-i+1) * myList[i-1];
        }
        Console.WriteLine($"sum: {sum}");

        using System.Linq;

        int[] myList = { 7, 11, 17, 5, 18, 6 };

        int j = myList.Length;
        var sum = myList.Aggregate(0, (total, x) => total+=x*j--);
        Console.WriteLine($"sum: {sum}");

答案 5 :(得分:0)

using System;
using System.Linq;

var myList = new int[] { 7, 11, 17, 5, 18, 6 };

var sum = myList.Reverse()
    .Select((v, i) => v * (i + 1))
    .Sum();

Console.WriteLine(sum);

附言更新了 .NET Fiddle

答案 6 :(得分:0)

解决这个问题的方法有很多,这里是一种:

int [] myList = {7, 11, 17, 5, 18, 6};
var result = myList.SelectMany((x, i) => myList.GetRange(0, i + 1)).Sum();

如果我把它分解成小块

int [] myList = {7, 11, 17, 5, 18, 6};

var grouped = myList.Select((x, i) => myList.GetRange(0, i + 1));
// grouped = {{7},{7,11},{7,11,17},{7,11,17,5},{7,11,17,5,18},{7,11,17,5,18,6}}

var flattened = grouped.SelectMany(x => x);
// flattened = {7,7,11,7,11,17,7,11,17,5,7,11,17,5,18,7,11,17,5,18,6}

var sum = flattened.Sum();
// sum = 222