C++ 中的数组和难题?

c++server side programmingprogramming

这里我们将看到一个与数组相关的有趣问题。有一个包含 n 个元素的数组。我们必须创建另一个包含 n 个元素的数组。但第二个数组的第 i 个位置将保存第一个数组中除第 i 个元素之外的所有元素的总和。一个限制是我们不能在这个问题中使用减法运算符。

如果我们可以使用减法运算,我们可以轻松解决这个问题,通过获取所有元素的总和,然后减去第一个数组的第 i 个元素并将其存储到第二个数组的第 i 个位置。

在这里我们通过每次添加元素来解决这个问题,并忽略位置 i 处的元素,i 在 0..n-1 中。让我们看看得到要点的算法。

算法

sumArray(arr, n)

begin
   定义一个大小为 n 的数组,名为 res
   对于 arr 中的所有元素 i,执行
      sum := 0
      对于 arr 中的所有元素 j,执行
         如果 i 和 j 不相同,则
            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 << "初始数组: ";
   printArray(myArr, 7);
   sumArray(myArr, resArr, 7);
   cout << "最终数组: ";
   printArray(resArr, 7);
}

输出

初始数组:5 4 7 6 9 2 3
最终数组:31 32 29 30 27 34 33

相关文章