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# 上编码?
答案 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>
我们不知道的解决方案Length
或 Count
你可以放 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();
答案 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