समस्या कथन
n तत्वों की एक सरणी को देखते हुए। कार्य n/2 जोड़े को इस तरह से बनाना है कि n/2 जोड़े के वर्गों का योग न्यूनतम हो।
उदाहरण
यदि दिया गया सरणी है -
arr[] = {5, 10, 7, 4}
then minimum sum of squares is 340 if we create pairs as (4, 10) and ( 5, 7) एल्गोरिदम
1. Sort the array
2. Take two variables which point to start and end index of an array
3. Calulate sum as follows:
sum = arr[start] + arr[end];
sum = sum * sum;
4. Repeate this procedure till start < end and increment minSum as follows:
While (start < end) {
sum = arr[start] + arr[end];
sum = sum * sum;
minSum += sum;
++start;
--end;
} उदाहरण
#include <iostream>
#include <algorithm>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int getMinSquareSum(int *arr, int n) {
sort(arr, arr + n);
int minSum = 0;
int start = 0;
int end = n - 1;
while (start < end) {
int sum = arr[start] + arr[end];
sum *= sum;
minSum += sum;
++start;
--end;
}
return minSum;
}
int main() {
int arr[] = {5, 10, 7, 4};
int res = getMinSquareSum(arr, SIZE(arr));
cout << "Minimum square sum: " << res << "\n";
return 0;
} आउटपुट
जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -
Minimum square sum: 340