Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 两次交换,找到最小差异_Algorithm_Data Structures - Fatal编程技术网

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);
库特