इस समस्या में, हमें दो सरणियाँ arr1[] और arr2[], और दो संख्याएँ N और M दी गई हैं।
N, arr1 से लिए गए तत्वों की संख्या देता है।
M, arr2 से लिए गए तत्वों की संख्या देता है।
हमें arr1[i] से arr2[i] में से एक तत्व चुनना है, जिसके लिए योग अधिकतम हो, लेकिन अधिकतम N arr1 से और M arr2 से लिए जा सकते हैं।
हमारा कार्य एक प्रोग्राम बनाना है जो C++ में क्रमानुसार दो सरणियों से तत्व चुनकर अधिकतम योग ढूंढे।
उदाहरण
इनपुट
arr1[] = {5, 1, 6, 2, 8, 9}
arr2[] = {8, 4, 7, 9, 1, 3}
M = 3, N = 2
आउटपुट
28
व्याख्या
चुने जाने वाले तत्व हैं: i = 0, arr1[0] = 5, arr2[0] = 8. लिया गया तत्व 8 i = 1, arr1[1] = 1, arr2[1] = 4. लिया गया तत्व 4 i = 2, arr1[2] = 6, arr2[2] = 7. लिया गया तत्व 6 i = 3, arr1[3] = 2, arr2[3] = 9. लिया गया तत्व 2 i = 4, arr1[4] = 8, arr2[0] = 1. लिया गया तत्व 8 maxSum = 8 + 4 + 6 + 2 + 8 = 28
समाधान दृष्टिकोण
समस्या को हल करने का एक समाधान arr1 और arr2 के अधिकतम तत्व को ढूंढना है, जब तक तत्वों की संख्या M या N तक नहीं पहुंच जाती। और फिर सभी मानों को जोड़कर योग निकालना।
एल्गोरिदम
आरंभीकरण -
maxSum = 0
चरण 1 -
i → 0 से n तक
चरण 1.1 -
यदि arr1[i] > arr2[i] और M >= 0 → maxSum += arr1[i]।
चरण 1.2 -
अन्यथा यदि arr1[i] < arr2[i] और N >= 0 → maxSum += arr2[i]।
चरण 1.3 -
अन्यथा बाहर निकलें।
चरण 3 -
maxSum वापस करें
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,
#include<iostream>
using namespace std;
int calcMaxSumFromArrays(int arr1[], int arr2[], int N, int M, int size1, int size2) {
int maxSum = 0;
for(int i = 0; i < size1; i++){
if(arr1[i] > arr2[i] && N > 0){
maxSum += arr1[i];
N--;
}
else if(arr1[i] <= arr2[i] && M > 0){
maxSum += arr2[i];
M--;
}
else if(M > 0){
maxSum += arr2[i];
M--;
}
else if(N > 0){
maxSum += arr1[i];
N--;
}
else
return maxSum;
}
return maxSum;
}
int main() {
int arr1[]= {5, 1, 6, 2, 8, 9};
int arr2[]= {8, 4, 7, 9, 1, 3};
int N = 3, M = 2;
int size1 = sizeof(arr1)/sizeof(arr1[0]);
int size2 = sizeof(arr2)/sizeof(arr2[0]);
cout<<"The maximum sum by picking elements from two arrays in order is "<<calcMaxSumFromArrays(arr1, arr2, N, M, size1, size2);
return 0;
}
आउटपुट
The maximum sum by picking elements from two arrays in order is 28