C ++总和数组之谜
数组是一种数据结构,用于存储相同数据类型的多个元素。它可以一次存储整个值集。但是它的长度需要预先定义。
在这个和数组难题中,我们得到了一个确定大小的数组A1,例如n。为了解决这个难题,我们将创建一个名为S1的数组,该数组存储该数组中除使用其位置的元素之外的所有元素的总和。例如,如果正在计算S1[3],那么我们将找到A1的所有元素之和,位置4处的元素除外。
示例-
Array A1 = {1,2,3,4,6}
Output S1 = {15,14,13,12,10}解释-为了计算求和数组,我们将初始数组的每个元素加到一个求和变量中,该变量接受与和数组具有相同编号的值。这意味着对于sum数组的第一个元素,我们将计算除数组的第一个元素之外的所有元素的总和,并且对整个数组都相同。让我们使用此逻辑为求和数组的每个元素计算值。
Sum[0],我们将计算除第0个 索引处的元素以外的元素之和。所以,
总和[0]=2+3+4+6=15
同样,我们将计算sum[1]的值...
总和[1]=1+3+4+6=14
总和[2]=1+2+4+6=13
总和[3]=1+2+3+6=12
总和[4]=1+2+3+4=10
因此,sum数组的所有元素尚未准备就绪,并且sum数组为sum={15,14,13,12,10}
算法
Step 1 : Initialise a sum array sum[n] to zero, where n = size of the original array.
Step 2 : Iterate over sum[] and do :
Step 2.1 : For sum[i], run a for loop for j -> 0 to n
Step 2.2 : if(i != j) {sum[i] += arr[j] }
Step 3: Print sum array using std print statement.示例
#include <iostream>
using namespace std;
int main() {
int arr[] = { 3, 6, 4, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int leftSum[n], rightSum[n], Sum[n], i, j;
leftSum[0] = 0;
rightSum[n - 1] = 0;
cout<<"The original array is : \n";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
for (i = 1; i < n; i++)
leftSum[i] = arr[i - 1] + leftSum[i - 1];
for (j = n - 2; j >= 0; j--)
rightSum[j] = arr[j + 1] + rightSum[j + 1];
for (i = 0; i < n; i++)
Sum[i] = leftSum[i] + rightSum[i];
cout<<"\nThe sum array is : \n";
for (i = 0; i < n; i++)
cout << Sum[i] << " ";
return 0;
}输出结果
The original array is : 3 6 4 8 9 The sum array is : 27 24 26 22 21