Java:如何在同一个数组中逐个求和数组元素

时间:2014-07-01 19:19:06

标签: java

我已经搜索并考虑了很多,但无法提出解决方案。

给定一个数字数组,我应该将每个元素与下一个元素相加并在同一个数组中写入,然后一次又一次地写入,直到数组的第一个位置[0]包含所有元素的总和。
例如:test[] = {1, 2, 3, 4, 5}
下一步将是:
test[0] = test[0] + test[1] = 1 + 2 = 3;
test[1] = test[2] + test[3] = 3 + 4 = 7;
test[2] = test[4] = 5;
数组变为:{ 3 7 5 ,4,5}

然后它再次重复:
test[0] = test[0] + test[1] = 3 + 7 = 10;
test[1] = test[3] = 5;
数组变为:{ 10 5 ,5,4,5}

然后再次最终:
test[0] = test[0] + test[1] = 10 + 5 = 15;
数组变为:{ 15 ,5,5,4,5}

我知道List是正确的解决方案,但练习是用一个简单的数组解决它。 欢迎提出所有建议!

再说一遍:这个任务不是关于效率,而是关于使用数组来解决它。 对不起,这是我的第一篇帖子,看起来很乱。

修改
我所得到的是这样的:
for (int i = 0; i < test.length - (test.length / 2); i++) { test[i] = test[2 * i] + test[2 * i + 1]; }
但它只能在偶数个给定数字的情况下工作,并且需要在一个循环中重复正确的重复次数。

3 个答案:

答案 0 :(得分:0)

这很麻烦,但有效。它修改了数组,每次都覆盖数组的一半(总结),奇数量保持在原位。

int[] test = { 1, 2, 3, 4, 5, 6 };
int l = test.length;
do {
    l = sumTo(test, l);
} while (l > 1);
System.out.println(Arrays.toString(test));

sumTo接受两个参数,即要修改的数组,以及要求和的索引。

int sumTo(int[] ar, int to) {
    int i;
    for (i = 0; i < to; i += 2) {
        if (i == to - 1)
            ar[i / 2] = ar[i];
        else
            ar[i / 2] = ar[i] + ar[i + 1];
        }
    return (i + 1) / 2;
}

答案 1 :(得分:0)

试试这个:

double f = test.length;
for(int j =0; j<=(int)(Math.log(f)/Math.log(2));j++){ //here i want the exponent
    int q = (int)Math.ceil(f/Math.pow(2,j)); //simplified because it's calculated once
    for (int i = 0; i<q; i+=2){
        if(i<q-1){
           test[i] += test[i+1];
           test[i/2] = test[i];
        else{
           test[i/2] = test[i];
        }
     }
 }

答案 2 :(得分:0)

public static void main(String[] args) {
    int[] tab = new int[]{1,2,3,4};
    tab[0] += tab[1];
    tab[1] = tab[2]+tab[3];
}

这可能与您的描述相符。