您的位置:首页 > 其它

华为招聘机试整理7:给定一个数组input[]

2014-07-10 23:33 295 查看


华为招聘机试整理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.因为我们中间最大的已经赋值了。

③数组间数据传送,我们有时候采用假设一个新的变量,这样会方便些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐