C++ 陣列求和難題


陣列是一種資料結構,可儲存同一資料型別的多個元素。它可以一次儲存整組值。但其長度需要預先定義。

在此陣列求和謎題中,我們提供一個確定大小(假設為 n)的陣列 A1。為了解決此謎題,我們將建立一個名為 S1 的陣列,該陣列儲存陣列中所有元素的和,不包括該元素的位置。例如,如果正在計算 S1[3],則我們會找出 A1 中所有元素的和,不包括位置 4 的元素。

示例 −

Array A1 = {1,2,3,4,6}
Output S1 = {15,14,13,12,10}

說明 − 要計算和陣列,我們將把初始陣列的每個元素新增到一個和變數,除了具有與和陣列相同的數字的值。這意味著對於和陣列的第一個元素,我們將計算除了陣列第一個元素之外的所有元素的和,對整個陣列都如此。讓我們使用此邏輯計算和陣列的每個元素的值。

Sum[0],我們將計算除第 0索引位置處的元素之外所有元素的和。因此,

Sum[0] = 2+3+4+6 = 15

同樣,我們將計算值和[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 = {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

更新時間:2019 年 10 月 4 日

183 次瀏覽

開啟 職業生涯

透過完成課程獲得認證

開始
廣告