我有一个排序数组,其值如下:
方案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
但是对于其他任何数组值都失败
需要帮助!
答案 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>