[C/C++]两两配对差值最小 - 2019校招编程刷题
参考链接
题目描述
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
输入描述
一共2行输入。
第一行为一个整数n,2<=n<=10000, 第二行为n个数,组成目标数组,每个数大于等于2,小于等于100。
输出描述
输出最小的差值。
输入例子1:
4
2 6 4 3
输出例子1:
1
输入例子2:
6
11 4 3 5 7 1
输出例子2:
3
思路:
- 主要是利用了c++里面对数组的一个排序函数
sort(数组名,数组名 + 数组长度)
。使用这个函数需要导入#include<algorithm>
- 求两两配对差值最小,其实就是把输入的数字排排序之后,从中间两位开始求和,再从中间向外面拓展一次求和,然后把求和的结果存到一个数组,再对这个数组排序,求最大最小值之差就可。
Just show my code
代码(c++/c)
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n; // 数组长度
cin >> n;
int *arr = new int[n];
for(int i = 0l; i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n); // 升序排序
int *sum_arr = new int[n/2]; // 放数组之和
for(int i = 0 ;i<(n/2);i++){
sum_arr[i] = arr[i]+arr[n-i-1];
}
sort(sum_arr,sum_arr+n/2); //升序排序
cout<<sum_arr[n/2-1] - sum_arr[0] << endl;
return 0;
}
如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!