Algorithm 两次交换,找到最小差异
有两个数组Algorithm 两次交换,找到最小差异,algorithm,data-structures,Algorithm,Data Structures,有两个数组a[],b[]sum_a是a[]的和,sum_b是b[]和diff=| sum_a-sum_b | 现在我们有机会与b[j]交换a[i]两次 我们想得到最小的差异 示例: a=75 b=3 3 6 我们可以用3换7,用6换5: a=3765 b=7356 因此,我们可以得到最小差值为(3+7+6+5)-(7+3+5+6)=0 问题是:如何通过编程从给定数组a[]和b[]中找到最小差异?您可以使用蛮力算法来解决这个问题。下面我使用了两个循环来模拟一个交换,您可以扩展来模拟两个交换。在cp
a[],b[]
sum_a
是a[]
的和,sum_b
是b[]
和diff=| sum_a-sum_b |代码>
现在我们有机会与b[j]
交换a[i]
两次
我们想得到最小的差异
示例:
a=75
b=3 3 6
我们可以用3换7,用6换5:
a=3765
b=7356
因此,我们可以得到最小差值为(3+7+6+5)-(7+3+5+6)=0代码>
问题是:如何通过编程从给定数组a[]和b[]
中找到最小差异?您可以使用蛮力算法来解决这个问题。下面我使用了两个循环来模拟一个交换,您可以扩展来模拟两个交换。在cpp中演示
int main()
{
int a[100];
int b[100];
int sumA=0;
int sumB=0;
int diff=0;
int n;
cin>>n;
for(int i=0; i<n; i++){
cin>>a[i];
sumA+=a[i];
}
for(int i=0; i<n; i++){
cin>>b[i];
sumB+=b[i];
}
diff= abs(sumA-sumB);
cout<<" Orig diff: " <<diff<<endl;
for(int i=0; i<n; i++){
for(int j=0; j<n;j++){
int tmp = abs(a[i]-b[j]);
int newSumA = sumA+tmp;
int newSumB = sumB-tmp;
int newDiff = abs(newSumA-newSumB);
if(newDiff<diff){
diff = newDiff;
}
}
}
cout<<"Answer: "<<diff<<endl;
return 0;
}
intmain()
{
INTA[100];
int b[100];
int-sumA=0;
int-sumB=0;
int-diff=0;
int n;
cin>>n;
对于(int i=0;i>a[i];
sumA+=a[i];
}
对于(int i=0;i>b[i];
sumB+=b[i];
}
差值=绝对值(sumA sumB);
库特