华为的面试题 要求8分钟写出代码
2012-12-04 16:06
274 查看
华为的面试题 要求8分钟写出代码
我们整个宿舍 用了4天 都没有个思路
在网上参考了puresk的算法思想 才写出来这100多行代码
对puresky表示衷心的感谢
原文地址
http://hi.baidu.com/gropefor/item/4750622656c6a010087508bc
源代码如下 可直接复制到vc6.0 编译
我们整个宿舍 用了4天 都没有个思路
在网上参考了puresk的算法思想 才写出来这100多行代码
对puresky表示衷心的感谢
原文地址
http://hi.baidu.com/gropefor/item/4750622656c6a010087508bc
源代码如下 可直接复制到vc6.0 编译
////////////////////////////////////////////////////////////////////////////// // Purpose: 给定两个的数组,任意交换两个数组中的元素, // 使得两个数组中元素和差值最小,要求输出最小的差值! // Algorithm: 每次从两个数组中分别选择一个数交换,使两个数组和的差值 // 减少的最多,迭代直到找不到这样可交换的数字对! // Author: 董磊峰 算法参考puresky // Date: 2012/06/10 ////////////////////////////////////////////////////////////////////////////// #include<stdio.h> #define N 20 int 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;i<n;i++) scanf("%d",&a[i]); /* 65 32 83 348 73 78 70 35 68 72 82 15 16 63 21 81 19 12 47 47 4 19 78 17 62 20 79 23 44 10 60 8 24 80 22 87 99 84 86 88 */ } int sum(int a[],int n) //求数组元素的和 { int i,s=0; for(i=0;i<n;i++) s+=a[i]; return s; } void print(int a[],int n) //输出数组 { int i; for(i=0;i<N;i++) printf("%3d",a[i]); printf("总和是%d\n",sum(a,N)); } int solve() { int sum1,sum2,s; int *max,*min,dif; int i,j,x,y; //临时交换变量 int flag=0; //代表是否有可以交换的元素 初值为0 默认为没有交换的元素 creat(a,N); creat(b,N); //向a b数组中输入数字 printf("\n"); for(i=0;i<N;i++) printf("%3d",i); printf("\n"); print(a,N); print(b,N); sum1=sum(a,N); sum2=sum(b,N); if(sum1>sum2) //让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;i<N;i++) for(j=0;j<N;j++) { s=max[i]-min[j]; //s为两数组中元素的差值(为大数组减去小数组) if( s>0 && 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<N;i++) printf("%3d",i); printf("\n"); print(a,N); //打印出两个数组及差值 print(b,N); dif=dif-2*(min[y]-max[x]); printf("两数组的差为%d \n\n",dif); } else break; } return 0; } void jiao(int x,int y,int *max,int *min) { int temp; temp=max[x]; //一下三行为元素交换 max[x]=min[y]; min[y]=temp; }
相关文章推荐
- 华为的面试题 要求8分钟写出代码
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 8分钟写出代码的华为面试题?不要被标题迷惑!
- 华为面试题(8分钟写出代码)
- 传说中的华为面试题(8分钟写出代码)
- 华为的面试题,要求8分钟写出一段程序
- 华为面试题(8分钟写出代码)
- n年前传说中华为面试题(8分钟写出代码)
- 关于一道面试题的解答(华为公司python面试题,要求10分钟写出代码)
- 【华为公司Python面试题】,要求10分钟写出代码。。。
- 【华为公司Python面试题】,要求10分钟写出代码,
- n个数,找出其中最小的k个数,写出代码,要求最坏情况下的时间复杂度不能高于O(n logk)
- 华为代码风格要求
- 百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来
- 有一堆扑克牌,其中某张牌的张数超过了扑克牌总数的一半,请找到这张牌。写出算法思路、代码实现和算法的时间复杂度,要求算法尽可能高效。假设给定一个扑克牌的数组poker和它的大小n,请返回所求的扑克牌。
- php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。
- 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
- 华为面试题 题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 解一道面试题——华为社招现场面试1:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321 。