题目:有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];源码:#include<iostream>#include<string>using namespace std;int myfabs(int a){ if(a<0) return 0-a; else return a;}void swap(int * a, int * b ,int i, int j){ a[i]=a[i]+b[j]; b[j]=a[i]-b[j]; a[i]=a[i]-b[j];}int sum(int *a ,int size){ int result=0; for(int i=0;i<size;i++) result+=a[i]; return result;}void equalize(int *a, int * b,int size){ int A= sum(a,size)-sum(b,size); if(A<0) { equalize(b,a,size); return; } else { int i,j; int aindex=-1; int bindex=-1; int min=sum(a,size)+sum(b,size); for(i=0;i<size;i++) for(j=0;j<size;j++) { if(!(a[i]-b[j]>0&&a[i]-b[j]<A)) continue; if(myfabs(a[i]-b[j]-A/2)<min) { min=myfabs(a[i]-b[j]-A/2); aindex=i; bindex=j; } } if(aindex==-1&&bindex==-1) return; else { swap(a,b,aindex,bindex); equalize(a,b,size); } }}void printStr(int * str, int n){ for(int i=0;i<n;i++) { cout<<str[i]<<" "; } cout<<endl;}int main(){ int a[6]={100,99,98,97,2,3}; int b[6]={1,2,3,4,5,6}; equalize(a,b,6); printStr(a,6); printStr(b,6); cout<<sum(a,6)-sum(b,6);}