2017-08-28 1 views
-1

Il y a deux tableaux a[], b[];sum_a est la somme des a[], sum_b est la somme des b[] et diff = |sum_a - sum_b|;deux fois pour échanger, trouver le minimum diff

maintenant, nous avons la chance d'échanger avec a[i]b[j] deux fois;

nous voulons obtenir le diff minimum?

exemple:
a = 7 7 5 5
b = 3 3 6 6

nous pouvons échanger 7 avec 3, et l'échange 5 de 6:

un = 3 7 6 5
b = 7 3 5 6

afin que nous puissions obtenir le diff minimum est (3+7+6+5)-(7+3+5+6) = 0;

La question: comment pouvez-vous programmer pour trouver le minimum diff des tableaux donnés a[] and b[]?

Répondre

0

Vous pouvez résoudre ce problème en utilisant un algorithme de force brute. Ci-dessous j'ai utilisé deux boucles pour simuler un échange, vous pouvez étendre pour simuler deux échanges. Démo en 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; 
}