我已经搜索并思考了很多,但无法想出解决方案。
给定一个数字数组,我应该将每个元素与下一个元素相加,并将其写入同一个数组中,然后一次又一次,直到数组的第一个位置 [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}
我知道列表是正确的解决方案,但练习是用一个简单的数组来解决它。 欢迎所有建议!
再说一次:这个任务不是关于效率,而是关于使用数组来解决它。 抱歉,这是我的第一篇文章,看起来很乱。
编辑:
我想到的是:
for (int i = 0; i < test.length - (test.length / 2); i++) {
test[i] = test[2 * i] + test[2 * i + 1];
}
但它仅在给定数字为偶数的情况下才有效,并且需要在循环中重复正确的次数。
最佳答案
这很困惑,但是有效。它会就地修改数组,每次覆盖数组的一半(总和),奇数数量保留在原地。
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;
}
关于Java:如何将同一数组中的数组元素一一求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24517732/