华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

思想一定是求差运算,然后缩小差值

#include "stdio.h"

#include "conio.h"
#include "math.h"
#define true 1
#define false 0
#define N  5   //N代表数组长度,C语言没有length属性,只能人为地宏定义一个参数?
void huawei(int A[],int B[])
{
    int i=0,tmp=0,j,great,sum1=0,sum2=0,a,max;
    int delta=0;
    for(i=0;i<N;i++)
    {
       sum1 += A[i];
       sum2 += B[i];
    }
    if(sum1>sum2){
      delta=(sum1-sum2);
      great=false;
    }else{
      delta=(sum2-sum1);
      great=true;
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            a=A[i]-B[j];
            max=abs(a);
            if((max*2<=delta)&&((a<0&&great)||(a>0&&!great)))
            {
                if(delta>=0)
                {
                        tmp=A[i];
                        A[i]=B[j];
                        B[j]=tmp;
                        delta -= abs(a)*2;
                }
            }
        }
    }
    printf("\nthe finnal cha zhi:%d",delta);
}
main()
{
    int a[N]={1,2,3,5,7},b[N]={4,5,6,5,8},i;
    huawei(a,b);
    printf("the result is nextline ,please think it quickly\n");
    for(i=0;i<N;i++)
    {
        printf("a[%d]=%d b[%d]=%d ",i,a[i],i,b[i]);
    }
    getch();
}

你可能感兴趣的:(面试题,C语言,华为,宏,math.h)