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);
}

輸出

Initial Array: 5 4 7 6 9 2 3
Final Array: 31 32 29 30 27 34 33

更新於: 2019 年 7 月 30 日

136 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始學習
廣告
© . All rights reserved.