华为的面试题 要求8分钟写出代码
//
// 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分钟写出代码相关推荐
- 华为OD机试题整理,已经写了参考代码
华为OD机试题整理,已经写了参考代码 .链接如下: 华为OD机试题整理链接
- 从一副去掉大小王的 52 张扑克牌中,请写出代码,用随机抽样的方法,分别估计出现 炸弹、顺子 (5张)、同花顺 (3 张)的概率。请使用自己的学号作为种子,得出最后的估计结果。
从一副去掉大小王的 52 张扑克牌中,请写出代码,用随机抽样的方法,分别估计出现 炸弹.顺子 (5张).同花顺 (3 张)的概率.请使用自己的学号作为种子,得出最后的估计结果. (Tips:3张和5张 ...
- 动态代理 需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱37分。请用写出代码。
需求:一个超级明星技能跳舞.唱歌.拍电影.睡觉.明星经纪人公司接活动,赚的钱37分.请用写出代码. 这是一个典型的动态代理的问题,代码实现如下: 准备工作 我们需要建立2个类和一个接口. SuperS ...
- 华为OD机试题 - 最大排列(JavaScript)| 代码,编码思路,解题知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...
- 华为OD机试题 - 射击比赛(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 括号检查(JavaScript) 华为OD机试题 - 最小施肥机能效(JavaScript) 华为OD机试题 - 子序列长度(JavaScript) 华为OD机试题 ...
- 年薪10万与年薪100万的程序员,写出代码的区别
编程是一门创造性的工作,是一门艺术.我们每天与代码打交道,为什么普通码农辛苦一年只拿十万,而高级架构师年薪百万.最主要的就是我们敲出来的代码有差别,差别在意大部分码农敲出来坏的代码,而高级架构师能敲出 ...
- java 怎么优雅的写出代码_【Java】基础50:如何让写的代码像诗一样优雅?
今天是刘小爱自学Java的第50天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.Stream流引入 这个流和IO流中的流很容易弄混淆. 但是它们是两个完全不一样的概念,Stream流 ...
- 给新手看的 Micronaut 入门教程,10 分钟写出一个 Micronaut 程序
以下内容均选自 Micronaut 入门实战:基于 JVM 的微服务框架 . Micronaut是什么? Micronaut 是一个现代化的基于 JVM 的全栈框架,用于构建模块化且易于测试的微服务或 ...
- python蟒蛇编程_《大蟒蛇编程第1课》如何用3分钟写出第一个动画程序
几个月以前,我写了一篇"为什么要从小学习编程", 后来非常多人加我微信,有的说想学习编程,很着急,有的遇到问题希望我给答疑的,有的说希望我能开班教他的孩子. 后来,我真的做了一个小 ...
最新文章
- from __future__ import print_function 介绍
- matlab字符处理
- idea 代码格式化插件_IDEA非常棒的插件,阿里巴巴约定成文的代码公约规范
- diskgeniusv4.4.0_一文上手最新Tensorflow2.0系列|TensorFlow2.0安装
- idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...
- 英特尔处理器曝出重大安全漏洞,迫使 Linux 和 Windows 更新设计
- bzoj 2464: 中山市选[2009]小明的游戏(BFS)
- 一般凸二次规划的有效集算法 Matlab程序
- 怎么把一个gif表情包分解成多个?
- JanusGraph配置参考大全
- 笔记本html5播放没有图像,HTML5视频标签无法在Lightbox中使用(HTML5 Video: autoplay not working in lightbox)...
- QT之如何添加现有文件
- android 常用机型尺寸_安卓手机屏幕多大合适?6.4英寸是“黄金尺寸”吗?
- 局域网资产发现过程(利用工具nmap、masscan)
- 名帖98 赵孟頫 小楷《黄庭经》
- 层次分析法(AHP)基础概念整理+步骤总结
- SQL SERVER2008局域网内连不上问题
- socket连接 error 113 /111 的解决方法
- Tekton task入门上
- 解决“¥”符号在安卓上显示只有一个横杠的问题