华为的面试题 要求8分钟写出代码

网友投稿 644 2022-11-27

华为的面试题 要求8分钟写出代码

华为的面试题 要求8分钟写出代码

华为的面试题 要求8分钟写出代码

我们整个宿舍 用了4天 都没有个思路

在网上参考了puresk的算法思想 才写出来这100多行代码

对puresky表示衷心的感谢

源代码如下 可直接复制到vc6.0 编译

//// Purpose: 给定两个的数组,任意交换两个数组中的元素,// 使得两个数组中元素和差值最小,要求输出最小的差值!// Algorithm: 每次从两个数组中分别选择一个数交换,使两个数组和的差值// 减少的最多,迭代直到找不到这样可交换的数字对!// Author: 董磊峰 算法参考puresky// Date: 2012/06/10//#include#define N 20int a[30],b[30];void creat(int n); //向a b数组中输入数字int solve(); int sum(int a[],int n); //求数字元素的和void print(int a[],int n); //输出数组void jiao(int x,int y,int *max,int *min); //交换元素void main(){ solve();}void creat(int a[],int n) //向a b数组中输入数字{ int i; printf("输入数组\n"); for(i=0;isum2) //让max指针指向a b中较大的数组 { max=a; min=b; dif=sum1-sum2; //dif为两数组和的差值 (保证dif为正数) } else { max=b; min=a; dif=sum2-sum1; //dif为两数组和的差值 (保证dif为正数) } printf("两数组的差为%d \n\n",dif); int yuan=0; //应用于while函数 初值为0 代表差值减小的量 while(1) //while函数运行几次 就代表执行交换几次 { flag=0; //每交换一次后yuan归零 x=0;y=0; //记录交换的位置 yuan=0; //每交换一次后yuan归零 for(i=0;i0 && 2*s<=dif ) if(2*s>yuan) { yuan=2*s; x=i;y=j; //记录交换的位置 flag=1; } } if(flag) { printf("交换max[%d]的%d min[%d]的%d \n",x,max[x],y,min[y]); jiao(x,y,max,min); for(i=0;i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:tomcat中的线程问题2
下一篇:数电复习、组合逻辑电路-08-13
相关文章

 发表评论

暂时没有评论,来抢沙发吧~