数组项的累计和

时间:2018-12-13 10:11:47

标签: c# arrays .net algorithm logic

我有一个排序数组,其值如下:

方案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

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

需要帮助!

2 个答案:

答案 0 :(得分:1)

选项1

因此,如果您希望如示例中那样获得准确的结果,则可以使用此方法。 它将返回一个部分和数组,您可以稍后对其求和以获得结果:

rotateValueAnimator = ValueAnimator.ofInt(0, 360).setDuration(1000);
rotateValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            Integer integer = (Integer) animation.getAnimatedValue();
            startPosition = integer;
            postInvalidate();
        }
    });

private void drawProgressCircle(Canvas canvas) {
    paint.setColor(progressColor);
    canvas.drawArc(rect, startPosition, percentage * 360, false, paint);
}

并以此方式使用:

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(); 将为134。

选项2

但是累计和的实际正确表示是:sumOfCumulativeSums。因此,如果您希望方法的正确表示形式返回正确的累计和,则可以改用以下方法:

a, a+b, a+b+c, ...

修改

希望这可以帮助您以任何一种方式解决问题,如果对代码有任何疑问或修改,请询问。

答案 1 :(得分:1)

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

<div id="layer1"></div>
<div id="layer2"></div>
<div id="layer3"></div>