华为招聘机试整理7:给定一个数组input[]
来源:互联网 发布:interbase数据库说明书 编辑:程序博客网 时间:2024/06/14 21:43
华为招聘机试整理7:给定一个数组input[]
题目:给定一个数组intput[]
如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1};
input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}
题目分析:
该题主要考察数组之间数据的排列和数组与数组直接数据的传送与接收。
算法思路:
①首先将输入的整型数据按升序排列 这里没有必要用冒泡法直接用#include<algorithm>中的sort
②找出中间位置middle,并且将最大的数据放进middle
③之后一个for循环,
1)当n为奇数时,我们可以直接以middle为中界限,循环去向左向右去查找,i 从1->middle
由于左边比右边大,所以将大的放入左边,次大的放入右边。
2)当n为偶数时,我们以middle为中界限,这里就要注意了,输出数据中第一位数据无法循环到,所以我们i 只能从1->middle-1了,而且最后直接将输入最小的数值放入输出数组的第一位上面。
这里需要注意一个小技巧就是,数组直接数据的传输,我们最好设置一个新的变量k。
===============================================================================
参考代码:
//给定一个数组input[]//2014.7.10 hepanhui#include <iostream>#include <algorithm>const int maxn = 100;using namespace std;void sort(int input[], int n, int output[]){ int middle; int k = 1; sort(input,input + n); //n为奇数时 if(n%2) { middle = (n-1)/2; output[middle] = input[n-1]; for(int i = 1; i <= middle; i++) { output[middle - i] = input[n - 1 - k]; output[middle + i] = input[n - 2 - k]; k = k + 2; } } else { middle = n/2; output[middle] = input[n-1]; for(int i = 1; i < middle; i++) { output[middle - i] = input[n - 1 - k]; output[middle + i] = input[n - 2 - k]; k = k+2; } output[0] = input[0]; }}int main(){ int n; cin >> n; int input[maxn], output[maxn]; for(int i = 0 ;i < n; i++) { cin >> input[i]; } sort(input, n, output); for(int i = 0; i < n-1; i++) { cout << output[i] << ","; } cout << output[n-1] << endl; return 0;}
调试中易犯错误的地方:
①我们这里不需要#include<string>整型数组输入的时候,我们一般都会告诉数组有多大,我们不能用strlen来测其大小,因为strlen是用来测量字符串。
②for循环的时候要注意i是从1开始的,而不是0.因为我们中间最大的已经赋值了。
③数组间数据传送,我们有时候采用假设一个新的变量,这样会方便些。
- 华为招聘机试整理7:给定一个数组input[]
- 华为招聘机试整理2:判断一个数组的元素是否是回文
- 华为招聘机试整理3:数组比较
- 华为招聘机试整理14:数组奇数偶数排序
- 华为校园招聘java机试整理
- 华为招聘机试整理9:输入一个字符串,用指针求出字符串的长度
- 华为招聘机试整理1:删除子串
- 华为招聘机试整理4:手机号码合法性判断
- 华为招聘机试整理5:简单四则运算
- 华为招聘机试整理6:选秀节目打分
- 华为招聘机试整理8:操作系统任务调度问题
- 华为招聘机试整理11:实现字符串间隔输出
- 华为招聘机试整理12:合并字符串
- 华为招聘机试整理13:算分数的问题
- 华为招聘机试整理15:约瑟夫环
- 华为招聘机试整理16:约瑟夫环应用
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。 .
- 化工科技会立刻就立刻欧佩克
- http://travel.tianya.cn/travelPlan/showPlan?planId=938156
- travel.tianya.cn/travelPlan/showPlan?planId=938156
- 比特币:新金融体系的引擎
- FPGA机器学习之stanford机器学习第十三堂
- 华为招聘机试整理7:给定一个数组input[]
- 0710
- 《统计输入字符的个数》
- 源码分析的一点感悟
- 今年一直比较忙,都没来博客,有需要联系的给我邮件。
- iOS开发 简单实现视频音频的边下边播
- 【企业开源系列】后起之秀Facebook凭什么挑战互联网霸主Google?
- KVC 键值编码 权限非常强大,可以访问对象属性,包括私有
- 华为OJ训练之 简易的银行排号叫号系统