为了账号安全,请及时绑定邮箱和手机立即绑定

数组项的累计和

数组项的累计和

C#
蝴蝶刀刀 2022-06-12 11:12:15
我有一个排序数组,其值如下: 我需要计算总计如下:场景 1 - 数组值 12、15、1712+15 = 27 27+17 = 44 44+27 = 71Total = 71场景 2 数组值 12,15,17,1912+15 = 2727+17 = 4444+19 = 6327+44+63 = 134总计 = 134场景 3 数组值 12,15,17,19,2312+15 = 2727+17 = 4444+19 = 6363+23 = 8627+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但是对于任何其他数组值都失败了需要帮忙!
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

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

}

编辑


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


查看完整回答
反对 回复 2022-06-12
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您还可以在没有任何中间数组分配的情况下获得总和:


static int Cumulate( int[] numbers )

{

    if ( numbers == null || numbers.Length < 2 )

        return 0;


    Array.Sort( numbers );


    var prevsum = numbers[0] + numbers[1];

    var sum = prevsum;


    for ( int i = 2 ; i < numbers.Length ; i++ )

    {

        prevsum += numbers[i];

        sum += prevsum;

    }


    return sum;

}


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号