首页 > 解决方案 > 数组项的累计和

问题描述

我有一个排序数组,其值如下: 我需要计算总计如下:

场景 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

但是对于任何其他数组值都失败了

需要帮忙!

标签: c#arrays.netalgorithmlogic

解决方案


选项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;
}

编辑

希望这可以帮助您以任何一种方式解决您的问题,如果您对代码有任何疑问或编辑,请提出。


推荐阅读