Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 합 배열 퍼즐?

<시간/>

여기서 우리는 배열과 관련된 한 가지 흥미로운 문제를 볼 것입니다. n개의 요소가 있는 배열이 있습니다. n개의 요소로 구성된 또 다른 배열을 만들어야 합니다. 그러나 두 번째 배열의 i번째 위치는 i번째 요소를 제외한 첫 번째 배열의 모든 요소의 합을 유지합니다. 그리고 한 가지 제약 조건은 이 문제에서 빼기 연산자를 사용할 수 없다는 것입니다.

빼기 연산을 사용할 수 있다면 모든 요소의 합을 구한 다음 첫 번째 배열의 i번째 요소를 빼서 두 번째 배열의 i번째 위치에 저장하여 이 문제를 쉽게 해결할 수 있습니다.

여기서 우리는 매번 요소를 추가하여 이 문제를 해결하고 0..n-1의 i에 대해 위치 i의 요소를 무시합니다. 요점을 파악하는 알고리즘을 살펴보겠습니다.

알고리즘

합 배열(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