forrestgang 发表于 2006-11-13 00:56

华为面试题(8分钟写出代码)

有两个数组a,b,大小都为n,数组元素的值任意,无序;
要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

zhhui2000 发表于 2006-11-13 07:54

先各自排序,再交叉存放较大无素

namtso 发表于 2006-11-13 08:33

难度太大。

RedPhoenix 发表于 2006-11-13 09:10

负数差是不是不考虑?

RedPhoenix 发表于 2006-11-13 09:14

2楼的算法应该是得不出最小差的

sithui 发表于 2006-11-13 09:33

先整体排序,再交叉取数

mike_chen 发表于 2006-11-13 09:34

放到一个临时数组里排序后,两头取,分别存在a,b里

hithotwinds 发表于 2006-11-13 10:16

哈哈。编好了。不知道思路是否正确,错就一定有的。

刚学编程两个月,不知道思路是否正确,错就一定有的。

#include"stdio.h"
com(int a,int n)
{int i,j,p,q,s;
for(i=0;i<2*n-1;i++)
{
a=q,p=i;
for(j=i+1;j<2*n;j++)
if(a>q)
{q=a;p=j;}
if(i!=p)
{a=s;
s=a;
a=a;
}
return(a[2*n-1);
   }
for(i
main()
int a,b,c,n,j,k,p,q;
printf("input two same struct array and same long\n");
scanf("%d",&n);
printf("input first struct array");
for(i=0;i<n;i++)
scanf(%d",a);
printf("input secend struct array");
for(i=0;i<n;i++)
scanf(%d",b);
for(i=0;i<n;i++)
c=a;
for(i=0;i<n;i++)
c=b;/*结合两组数据*/
c=,n);/*并排列大小*/
for(i=0;i<n;i++)
{a=0;
b=0;}/*清0*/
a=c;
b=c;
s=1;
t=1;
p=0;
q=0;
for(i=2;i<2*n-1;i++)
   {
if(s==n-1)\*判断是否已经分好了一个数组*\
{for(i=n+t-1;i<2*n-1;i++,t++)
b=c;
break;}
if(t==n-1)\*判断是否已经分好了另一个数组*\
{for(i=n+s-1;i<2*n-1;i++,s++)
b=c;
break;}
   for(j=0;j<s;j++)
    p+=a;\*求数组a的值*\
         
   for(j=0;j<t;j++)\*求数组a的值*\
   q+=b;

if(p>q)\*判断已经分好的数组大小,并分配下一数值到较少的数组*\
{c=b;
t++;}
else{c=a
s++;}
    }
for(i=0;i<n;i++)
printf("a=%d ",a);
printf("\n");
for(i=0;i<n;i++)
printf("b=%d ",b);

getch();

}

[ 本帖最后由 hithotwinds 于 2006-11-13 10:25 编辑 ]

yg 发表于 2006-11-13 10:17

全部加起来除2,然后试算

12013396 发表于 2006-11-13 10:47

设一个变量,类似于天平的指针,就像用天平称东西一样,只不过用变量来记录他们之间的差。然后,根据这个差对下次比较的双方进行调整,再对这个差进行调整,如此反复。不知可否??

[ 本帖最后由 12013396 于 2006-11-13 10:59 编辑 ]
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 华为面试题(8分钟写出代码)