C ++中的求和数组之谜?
在这里,我们将看到一个与数组有关的有趣问题。有一个包含n个元素的数组。我们必须创建另一个包含n个元素的数组。但是第二个数组的第i个位置将保存第一个数组中除第i个元素之外的所有元素之和。一个约束是我们不能在这个问题上使用减法运算符。
如果我们可以使用减法运算,则可以通过获取所有元素的总和,然后减去第一个数组的第i个元素并将其存储到第二个数组的第i个位置,轻松解决此问题。
在这里,我们通过每次添加元素来解决此问题,并忽略位置i处的元素,因为i在0..n-1中。让我们来看一下要点的算法。
算法
sumArray(arr,n)
begin
define an array called res of size n
for all elements i in arr, do
sum := 0
for all elements j in arr, do
if i and j are not same, then
sum := sum + arr[j]
end if
done
res[i] = sum
done
return res
end示例
#include<iostream>
using namespace std;
void printArray(int arr[], int n) {
for(int i = 0; i<n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void sumArray(int arr[], int resArr[], int n) {
for(int i = 0; i<n; i++) {
int sum = 0;
for(int j =0; j<n; j++ ) {
if(i != j) {
sum += arr[j];
}
}
resArr[i] = sum;
}
}
main() {
int myArr[7] = {5, 4, 7, 6, 9, 2, 3};
int resArr[7];
cout << "Initial Array: ";
printArray(myArr, 7);
sumArray(myArr, resArr, 7);
cout << "Final Array: ";
printArray(resArr, 7);
}输出结果
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33