64,282
社区成员
发帖
与我相关
我的任务
分享
先把两个数组从大到小排序,且求和
然后比较二者的差值为max
然后,从第一个一直到最后一个比较,如下:
如果交换这个两个数值刻意让新的数组的差值小于max就交换,然后继续
一直到最后
#include <iostream>
using namespace std;
int main( )
{
int i,j,n,m,c,x=0,y=0,t;
cin>>n;
int *a =new int [n];
int *b =new int [n];
cout<<"输入数组a:"<<endl;
for(i=0;i<n;i++ )
{
cin>>a[i];
}
cout<<"输入数组b:"<<endl;
for(j=0;j<n;j++ )
{
cin>>b[j];
}
for(int h=0;h<n;h++)
{
x=a[h]+x;
}
for(int k=0;k<n;k++)
{
y=b[k]+y;
}
m=y-x;
if(m<0)
{
m=-m;
}
c=m;
for(i=0;i<n;i++ )
{
for(j=0;j<n;j++)
{
t=a[i];
a[i]=b[j];
b[j]=t;
x=0;
y=0;
for( h=0;h<n;h++)
{
x=a[h]+x;
}
for( k=0;k<n;k++)
{
y=b[k]+y;
}
m=y-x;
if(m<0)
{
m=-m;
}
if(m<c)
c=m;
}
}
cout<<"输出最小差值c:"<<c<<endl;
for(i=0;i<n;i++ )
{
for(j=0;j<n;j++)
{
t=a[i];
a[i]=b[j];
b[j]=t;
x=0;
y=0;
for( h=0;h<n;h++)
{
x=a[h]+x;
}
for( k=0;k<n;k++)
{
y=b[k]+y;
}
m=y-x;
if(m<0)
{
m=-m;
}
if(m==c)
{
cout<<"输出新数组a:"<<endl;
for(i=0;i<n;i++ )
cout<<a[i]<<" ";
cout<<endl;
cout<<"输出新数组b:"<<endl;
for(j=0;j<n;j++ )
cout<<b[j]<<" ";
cout<<endl;
}
}
}
delete []a;
delete []b;
return 0;
}