c# - 数组项的累计和
问题描述
我有一个排序数组,其值如下: 我需要计算总计如下:
场景 1 - 数组值 12、15、17
12+15 = 27
27+17 = 44
44+27 = 71
Total = 71
场景 2 数组值 12,15,17,19
12+15 = 27
27+17 = 44
44+19 = 63
27+44+63 = 134
总计 = 134
场景 3 数组值 12,15,17,19,23
12+15 = 27
27+17 = 44
44+19 = 63
63+23 = 86
27+44+63+86 = 220
总计 = 220
场景 4 到 N 数组值 12,15,17,19,23.....N
我必须将上述逻辑带到 C# 代码中
我写如下:
int[] myNumbers = new int[] { 100,250,1000};
Array.Sort(myNumbers);
int sum = 0;
int temp = 0;
foreach (int y in myNumbers)
{
sum = sum + y;
}
for(int i=0;i<myNumbers.Length-1;i++)
{
temp = temp + myNumbers[i];
}
sum = sum + temp;
Console.Write(sum);
上面的代码适用于数组值 100,250,1000
但是对于任何其他数组值都失败了
需要帮忙!
解决方案
选项1
因此,如果您想获得示例中的准确结果,可以使用此方法。它将返回一个部分和数组,您可以稍后对其进行汇总以获得结果:
private static long[] CumulativeSums(long[] values)
{
if (values == null || values.Length <= 1) return new long[0];
var results = new long[values.Length];
results[0] = values[0] + values[1];
for (var i = 1; i < values.Length - 1; i++)
{
results[i] = results[i - 1] + values[i + 1];
}
return results;
}
并像这样使用它:
var numbers = new long[] { 12, 15, 17, 19 };
var sumOfCumulativeSums = CumulativeSums(numbers).Sum();
sumOfCumulativeSums
将是 134 。
选项 2
但累积和的实际正确表示是:a, a+b, a+b+c, ...
。因此,如果您想要返回正确累积和的方法的正确表示,您可以改用此方法:
public static long[] CumulativeSums(long[] values)
{
if (values == null || values.Length == 0) return new long[0];
var results = new long[values.Length];
results[0] = values[0];
for (var i = 1; i < values.Length; i++)
{
results[i] = results[i - 1] + values[i];
}
return results;
}
编辑
希望这可以帮助您以任何一种方式解决您的问题,如果您对代码有任何疑问或编辑,请提出。
推荐阅读
- javascript - 具有和不具有显式类型的变量的打字稿验证规则
- .net - Nuget 包问题
- android - 错误:包 com.getcapacitor.community.facebooklogin 在类星体 + 电容器中不存在错误
- struct - Julia:结构和方法构造函数中的函数
- vue.js - 我如何将代码 javascript 转换为 vue js
- mongodb - MongoDB 存储桶边界
- wordpress - 被黑的 Wordpress 管理员帐户
- sql - 按列分组并计算百分比,windows函数分区按
- ansible - 如何处理 ansible 的 yaml 文件中的长 URL?
- javascript - 寻找正则表达式模式以删除 JSON 字符串中的内容