मान लें हमारे पास एक सरणी A है। हमें जांचना है कि क्या हम सरणी को दो भागों में विभाजित कर सकते हैं, जिनका योग समान हो। मान लें तत्व [6, 1, 3, 2, 5] हैं, तो [6, 1] और [2, 5] दो उपसरणी हो सकते हैं।
इस समस्या को इन नियमों का पालन करके आसानी से हल किया जा सकता है। हमें पहले सरणी के सभी तत्वों का योग ज्ञात करना होगा, फिर सरणी के प्रत्येक तत्व के लिए, हम कुल_योग - अब तक मिले तत्वों के योग का उपयोग करके दायां योग निकाल सकते हैं।
उदाहरण
#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 ]