开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2165|回复: 9
收起左侧

[源码分享] 很久以前的华为招聘考试题

[复制链接]
发表于 2013-6-6 21:25:56 | 显示全部楼层 |阅读模式   陕西省西安市
很久以前的华为招聘考试题(要求8分钟写出代码)
有两个数组a,b,大小都为n,数组元素的值任意,无序;
要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

我可没有这本事,花了个多小时才搞定,发出代码供大家交流
  1. #include <iostream.h>
  2. #include <cstring>

  3. int a[]={4,99,0,888,0,122,1,999,1200,10};
  4. int b[]={0,2,19,3,420,66,0,80,546,123};
  5. // 排序算法,由大到小,p是数组的指针
  6. void sort(int *p,int len);
  7. // 求数组元素之和
  8. int sum(int *p,int len);

  9. int main()
  10. {
  11. // 取数组a的长度
  12. int len_a=sizeof(a)/sizeof(a[0]);
  13. int temp[(sizeof(a)/sizeof(a[0]))*2];
  14. // 合并数组
  15. for(int i=0;i<len_a;i++)
  16. {
  17. temp[i]=a[i];
  18. }
  19. for(i=0;i<len_a;i++)
  20. {
  21. temp[i+len_a]=b[i];
  22. }
  23. int len=sizeof(temp)/sizeof(temp[0]);
  24. //输出总和
  25. cout<<"总数="<<sum(temp,len)<<endl;
  26. sort(temp,len);
  27. cout<<"数组temp由大到小排序为:\n";
  28. for (i=0;i<len;i++)
  29. {
  30. cout<<temp[i]<<"\t";
  31. }
  32. // 将数组a清零
  33. int size=sizeof(a);
  34. memset(a,0,size);
  35. // 将数组b清零
  36. memset(b,0,size);
  37. // 重新排列的算法
  38. a[0]=temp[0];
  39. b[0]=temp[1];
  40. int n=1,m=1,j=len_a-1;
  41. for(i=2;i<len_a*2;i++)
  42. {
  43. if(sum(a,len_a)<sum(b,len_a))
  44. {
  45. if(n<len_a)
  46. a[n]=temp[i];
  47. else
  48. {
  49. {b[j]=temp[i];j--;}
  50. }
  51. n++;
  52. }
  53. else
  54. {
  55. if(m<len_a)
  56. b[m]=temp[i];
  57. else
  58. {
  59. {a[j]=temp[i];j--;}
  60. }
  61. m++;
  62. }
  63. }
  64. cout<<"重新排列后\n";
  65. for (i=0;i<len_a;i++)
  66. {
  67. cout<<a[i]<<"\t";
  68. }
  69. cout<<endl<<"数组之和 a="<<sum(a,len_a)<<endl;
  70. for (i=0;i<len_a;i++)
  71. {
  72. cout<<b[i]<<"\t";
  73. }
  74. cout<<endl<<"数组之和 b="<<sum(b,len_a)<<endl;
  75. return 1;
  76. }

  77. void sort(int *p,int len)
  78. {
  79. for (int i=0;i<len;i++)
  80. {
  81. for (int j=len-1;j>i;j--)
  82. {
  83. if(*(p+i)<*(p+j))
  84. {
  85. int a;
  86. a=*(p+i);
  87. *(p+i)=*(p+j);
  88. *(p+j)=a;
  89. }
  90. }
  91. }
  92. }


  93. int sum(int *p,int len)
  94. {
  95. int i, a=0;
  96. for(i=0;i<len;i++)
  97. {
  98. a+=*(p+i);
  99. }
  100. return a;
  101. }
复制代码

评分

参与人数 1精币 +1 收起 理由
ㄣ负二代 + 1 精彩文章希望继续努力

查看全部评分

发表于 2015-11-9 15:49:05 | 显示全部楼层   山东省聊城市
学习了。。谢谢 楼主哈。。SEO。站长
回复 支持 反对

使用道具 举报

发表于 2013-8-10 20:35:38 | 显示全部楼层   江苏省苏州市
ilcyeyl 发表于 2013-8-3 14:50
学习了。。谢谢 楼主哈。。SEO。站长

万一火了呢,对吧
回复 支持 反对

使用道具 举报

发表于 2013-8-10 20:33:31 | 显示全部楼层   山东省济南市
还可以
回复 支持 反对

使用道具 举报

结帖率:77% (59/77)
发表于 2013-8-3 15:03:12 | 显示全部楼层   海南省临高县
ilcyeyl 发表于 2013-8-3 14:50
学习了。。谢谢 楼主哈。。SEO。站长

这怎么说呢。哈。哈。哈
回复 支持 反对

使用道具 举报

结帖率:77% (59/77)
发表于 2013-8-3 14:50:57 | 显示全部楼层   海南省临高县
学习了。。谢谢 楼主哈。。SEO。站长

点评

打酱油都不忘了。做广告,你的敬业精神佩服!   广东省梅州市  发表于 2013-8-3 14:53
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)
发表于 2013-7-1 23:19:55 | 显示全部楼层   湖南省益阳市
对于ACM的队员来说这叫做水题,呵呵。不仅看你写不写得出代码,还得看运行时间会不会超时,又严格的时间和内存规定,。
回复 支持 反对

使用道具 举报

结帖率:94% (245/261)

签到天数: 1 天

发表于 2013-6-6 23:33:11 | 显示全部楼层   浙江省温州市
还请用易语言写 这样我容易理解 我不认识英语
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:60% (28/47)
发表于 2013-6-6 22:40:58 | 显示全部楼层   广东省广州市
用易语言写,代码会短很多
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表