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

Java:如何对同一数组中的数组元素逐个求和,java,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=1

我找了很多,想了很多,但没有找到解决办法

给定一个数字数组,我应该将每个元素与下一个元素求和,并将其写入同一个数组中,然后反复写入,直到数组的第一个位置[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
数组变为:{375,4,5}

然后它再次重复:

test[0]=test[0]+test[1]=3+7=10
test[1]=test[3]=5
数组变为:{105,5,4,5}

最后一次:

test[0]=test[0]+test[1]=10+5=15
数组变为:{15,5,5,4,5}

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

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

编辑:
我得出的结论是:
for(int i=0;i


但它只能在给定数量为偶数的情况下工作,并且需要在一个循环中重复正确的次数。

这很混乱,但可以工作。它在适当的位置修改数组,每次覆盖数组的一半(求和),保留奇数

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;
}
int-sumTo(int[]ar,int-to){
int i;
对于(i=0;i
试试这个:

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];
        }
     }
 }
double f=测试长度;
对于(int j=0;j

这可能与您的描述相符。

对于第一个元素,您做什么?对于第二个元素,您做什么?对于最后一个元素,您做什么?
test[0]+=test[i]
在某种循环中,您可以使用多个数组吗?类似于
A2[0]=A1[0]+A2[1]…
给定一个数字数组,我必须:test[0]=test[0]+test[1];test[1]=test[2]+test[3];test[2]=test[4]+test[5];然后我必须重复这个过程,直到所有元素的总和都在test[0]test[0]=test[0]+test[1]=1+2=3;test[1]=test[2]+test[3]=3+4=7;现在所有对都已添加,重复这个过程:test[0]=test[0]=test[0]+test[0]+test[1]=3+7=10;此任务不是关于效率,而是关于仅使用数组来解决它。您的解决方案只是将所有元素添加到第一个元素上,但这不是任务所要求的。我必须一次又一次地将所有元素成对添加,直到得到位置[0]上的总和.ah,明白了。对文件合并很有用。给我一秒钟,我会解决我的问题,我以前做过。会让我很高兴:)对不起,乔比,但是输入{1,2,3,4}你的最终数组是{10,7,7,4},而它应该是{10,7,3,4}。太接近了。好吧,如果你用调试器一步一步地调试它,你应该能够进行修改并使其正确。我可以确认它工作正常!现在我必须理解变量l/to是我们每次求和的数组的数量。每次迭代,将数组分成两半,向上取整。当只剩下一个元素时,这就是数组的和
public static void main(String[] args) {
    int[] tab = new int[]{1,2,3,4};
    tab[0] += tab[1];
    tab[1] = tab[2]+tab[3];
}