有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];
分析:要是序列的和之差最小,考虑将两个序列组合成一个序列1,对序列求和sum,选取一个数组,使得这个数组的和最接近sum/2,对合成序列1求和,然后取均值,再进行选取那些与这个均值最接近的序列1中的数,放入序列a中,这样可以使得数组和最近进sum/2。
代码:
MinMinus.h
#ifndef MINMINUS_CPP
#define MINMINUS_CPP
#include< iostream>;
#include< vector>;
#include <math.h>
using namespace std;
void MinMinus(int n,int c[]);
int extractmin(vector<double> ivec,vector<bool> visited);
#endif
MinMinus.cpp
#include "MinMinus.h"
void MinMinus(int n,int c[]){
vector<int> a,b;
int sum=0;
vector<double> ivec;