首页 文章资讯内容详情

最小化C ++中由N个数形成的N / 2对的和的平方和

2026-06-04 1 花语

问题陈述

给定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