C++ 数组求和难题?
这里我们来看一个与数组有关的有趣问题。有一个包含 n 个元素的数组。我们必须创建一个包含 n 个元素的其他数组。不过,第二个数组的第 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); }
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
输出
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33
广告