数组项的累计和

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


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


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


需要帮忙!


蝴蝶刀刀
浏览 128回答 2
2回答

慕后森

选项1因此,如果您想获得示例中的准确结果,可以使用此方法。它将返回一个部分和数组,您可以稍后对其进行汇总以获得结果:private static long[] CumulativeSums(long[] values){&nbsp; &nbsp; if (values == null || values.Length <= 1) return new long[0];&nbsp; &nbsp; var results = new long[values.Length];&nbsp; &nbsp; results[0] = values[0] + values[1];&nbsp; &nbsp; for (var i = 1; i < values.Length - 1; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; results[i] = results[i - 1] + values[i + 1];&nbsp; &nbsp; }&nbsp; &nbsp; 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){&nbsp; &nbsp; if (values == null || values.Length == 0) return new long[0];&nbsp; &nbsp; var results = new long[values.Length];&nbsp; &nbsp; results[0] = values[0];&nbsp; &nbsp; for (var i = 1; i < values.Length; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; results[i] = results[i - 1] + values[i];&nbsp; &nbsp; }&nbsp; &nbsp; return results;}编辑希望这可以帮助您以任何一种方式解决您的问题,如果您对代码有任何疑问或编辑,请提出。

慕丝7291255

您还可以在没有任何中间数组分配的情况下获得总和:static int Cumulate( int[] numbers ){&nbsp; &nbsp; if ( numbers == null || numbers.Length < 2 )&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; Array.Sort( numbers );&nbsp; &nbsp; var prevsum = numbers[0] + numbers[1];&nbsp; &nbsp; var sum = prevsum;&nbsp; &nbsp; for ( int i = 2 ; i < numbers.Length ; i++ )&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; prevsum += numbers[i];&nbsp; &nbsp; &nbsp; &nbsp; sum += prevsum;&nbsp; &nbsp; }&nbsp; &nbsp; return sum;}
打开App,查看更多内容
随时随地看视频慕课网APP