//程序写完 只管达到目的 没做过多优化 //以下程序是求出整数数组差的绝对值最小的两个组合 //结果可能不只一种组合 本程序只打印一个组合 #include <iostream> #include <list> using namespace std; #define N 3 typedef struct tem { int result; //保存两个组合的差 list<int> list1; //组合一 list<int> list2; //组合二 }TEAM; int main() { list<TEAM> teamList; int a[N] = {1,2,-20}; int b[N] = {50,-3,-30}; for (int i=0;i<N;i++) { TEAM team; int x = 0; for(int s=0;s<N;s++) { team.list1.clear(); team.list2.clear(); team.list2.push_back(a[i]); //组合二 team.list1.push_back(b[s]); //组合一 int sum1 = b[s]; int sum2 = a[i]; for (int j=0;j<N;j++) { if (x!=j) { team.list2.push_back(b[j]); //组合二 sum2+=b[j]; //组合二的和 } } for (int j=0;j<N;j++) { if (i!=j) { team.list1.push_back(a[j]); //组合一 sum1+=a[j]; //组合一的和 } } x++; team.result = abs(sum1-sum2); teamList.push_back(team); } } //得到差绝对值最小的组合 list<TEAM>::iterator itrR = teamList.begin(); int itemp=itrR->result; for (itrR;itrR!=teamList.end();itrR++) { if ((itrR->result)<=itemp) { list<int>::iterator itr1 = itrR->list1.begin(); list<int>::iterator itr2 = itrR->list2.begin(); int i = 0; for(itr1;itr1!=itrR->list1.end();itr1++) { a[i] = *itr1; i++; } i=0; for(itr2;itr2!=itrR->list2.end();itr2++) { b[i] = *itr2; i++; } itemp = itrR->result; } } //打印结果 cout<<"数组a:"; for (int i=0;i<N;i++) { cout<<a[i]<<" "; } cout<<endl<<"数组b:"; for (int i=0;i<N;i++) { cout<<b[i]<<" "; } cout<<endl; return 0; }