华为的面试题 要求8分钟写出代码
我们整个宿舍 用了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 474 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);}elsebreak; }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分钟写出代码相关推荐

  1. 华为OD机试题整理,已经写了参考代码

    华为OD机试题整理,已经写了参考代码 .链接如下: 华为OD机试题整理链接

  2. 从一副去掉大小王的 52 张扑克牌中,请写出代码,用随机抽样的方法,分别估计出现 炸弹、顺子 (5张)、同花顺 (3 张)的概率。请使用自己的学号作为种子,得出最后的估计结果。

    从一副去掉大小王的 52 张扑克牌中,请写出代码,用随机抽样的方法,分别估计出现 炸弹.顺子 (5张).同花顺 (3 张)的概率.请使用自己的学号作为种子,得出最后的估计结果. (Tips:3张和5张 ...

  3. 动态代理 需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱37分。请用写出代码。

    需求:一个超级明星技能跳舞.唱歌.拍电影.睡觉.明星经纪人公司接活动,赚的钱37分.请用写出代码. 这是一个典型的动态代理的问题,代码实现如下: 准备工作 我们需要建立2个类和一个接口. SuperS ...

  4. 华为OD机试题 - 最大排列(JavaScript)| 代码,编码思路,解题知识点

    最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...

  5. 华为OD机试题 - 射击比赛(JavaScript)| 代码+思路+重要知识点

    最近更新的博客 华为OD机试题 - 括号检查(JavaScript) 华为OD机试题 - 最小施肥机能效(JavaScript) 华为OD机试题 - 子序列长度(JavaScript) 华为OD机试题 ...

  6. 年薪10万与年薪100万的程序员,写出代码的区别

    编程是一门创造性的工作,是一门艺术.我们每天与代码打交道,为什么普通码农辛苦一年只拿十万,而高级架构师年薪百万.最主要的就是我们敲出来的代码有差别,差别在意大部分码农敲出来坏的代码,而高级架构师能敲出 ...

  7. java 怎么优雅的写出代码_【Java】基础50:如何让写的代码像诗一样优雅?

    今天是刘小爱自学Java的第50天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: ‍ 一.Stream流引入 这个流和IO流中的流很容易弄混淆. 但是它们是两个完全不一样的概念,Stream流 ...

  8. 给新手看的 Micronaut 入门教程,10 分钟写出一个 Micronaut 程序

    以下内容均选自 Micronaut 入门实战:基于 JVM 的微服务框架 . Micronaut是什么? Micronaut 是一个现代化的基于 JVM 的全栈框架,用于构建模块化且易于测试的微服务或 ...

  9. python蟒蛇编程_《大蟒蛇编程第1课》如何用3分钟写出第一个动画程序

    几个月以前,我写了一篇"为什么要从小学习编程", 后来非常多人加我微信,有的说想学习编程,很着急,有的遇到问题希望我给答疑的,有的说希望我能开班教他的孩子. 后来,我真的做了一个小 ...

最新文章

  1. from __future__ import print_function 介绍
  2. matlab字符处理
  3. idea 代码格式化插件_IDEA非常棒的插件,阿里巴巴约定成文的代码公约规范
  4. diskgeniusv4.4.0_一文上手最新Tensorflow2.0系列|TensorFlow2.0安装
  5. idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...
  6. 英特尔处理器曝出重大安全漏洞,迫使 Linux 和 Windows 更新设计
  7. bzoj 2464: 中山市选[2009]小明的游戏(BFS)
  8. 一般凸二次规划的有效集算法 Matlab程序
  9. 怎么把一个gif表情包分解成多个?
  10. JanusGraph配置参考大全
  11. 笔记本html5播放没有图像,HTML5视频标签无法在Lightbox中使用(HTML5 Video: autoplay not working in lightbox)...
  12. QT之如何添加现有文件
  13. android 常用机型尺寸_安卓手机屏幕多大合适?6.4英寸是“黄金尺寸”吗?
  14. 局域网资产发现过程(利用工具nmap、masscan)
  15. 名帖98 赵孟頫 小楷《黄庭经》
  16. 层次分析法(AHP)基础概念整理+步骤总结
  17. SQL SERVER2008局域网内连不上问题
  18. socket连接 error 113 /111 的解决方法
  19. Tekton task入门上
  20. 解决“¥”符号在安卓上显示只有一个横杠的问题

热门文章

  1. NESASM教程——第八天——比较
  2. Linux CentOS7 ssh免密钥登录
  3. E. The LCMs Must be Large(思维)
  4. 优化算法(一):牛顿法与拟牛顿法
  5. java图书馆_java编写图书馆管理系统
  6. 【编程之外】从《海贼王》的视角走进BAT的世界
  7. java不是有效的win32_不是有效的Win32应用程序的解决方法
  8. 什么是DOM,DOM的作用,以及DOM与JavaScript的关系
  9. 欢迎观看Toni_hou的#生活7
  10. CentOS配置本地yum源/阿里云yum源/163yuan源