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

C++에서 배열을 동일한 합계의 두 하위 배열로 나눌 수 있는지 확인

<시간/>

배열 A가 있다고 가정합니다. 배열을 합이 같은 두 부분으로 나눌 수 있는지 확인해야 합니다. 요소가 [6, 1, 3, 2, 5]이고 [6, 1] 및 [2, 5]가 두 개의 하위 배열이 될 수 있다고 가정합니다.

이 문제는 다음 규칙을 따르면 쉽게 해결할 수 있습니다. 먼저 배열의 모든 요소의 합을 찾아야 하고, 배열의 각 요소에 대해 total_sum - 지금까지 찾은 요소의 합을 사용하여 올바른 합을 계산할 수 있습니다.

예시

#include<iostream>
#include<numeric>
using namespace std;
void displaySubArray(int arr[], int left, int right) {
   cout << "[ ";
   for (int i = left; i <= right; i++)
      cout << arr[i] << " ";
      cout << "] ";
   }
   void subarrayOfSameSum(int arr[] , int n) {
      int total_sum = accumulate(arr, arr+n, 0);
      int so_far_sum = 0;
      for(int i = 0; i<n; i++){
         if(2*so_far_sum+arr[i] == total_sum){
            cout << "subarray 1: "; displaySubArray(arr, 0, i-1);
            cout << "\nsubarray 2: "; displaySubArray(arr, i+1, n-1);
               return;
         }
         so_far_sum += arr[i];
      }
   cout << "No subarray can be formed";
}
int main() {
   int arr[] = {6, 1, 3, 2, 5} ;
   int n = sizeof(arr)/sizeof(arr[0]);
   subarrayOfSameSum(arr, n);
}

출력

subarray 1: [ 6 1 ]
subarray 2: [ 2 5 ]