华为招聘机试整理14:数组奇数偶数排序
2014-07-11 17:12
363 查看
华为招聘机试整理14:数组奇数偶数排序
题目:数组奇数偶数排序对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
题目分析:
本题主要就是考查整型数组之间的排序
算法思路:
①先循环判断每个数的奇数偶数,分别放入奇数数组中,偶数数组中
②用sort将奇数数组和偶数数组排序
③比较奇数数组和偶数数组个数的大小关系
④根据题目要求组织存放数据
==========================================================================
参考代码:
//数组奇数偶数排序.cpp //2014.7.11 hepanhui #include <iostream> #include <algorithm> const int maxn = 100; using namespace std; bool compare(const int a, const int b) { return a > b; } void Sorted(int a[], int n) { int odd[maxn]; int even[maxn]; int k = 0, j = 0, m1 = 0; int cnt1 = 0,cnt2 = 0; for(int i = 0; i < n; i++) { if(a[i]%2) { odd[k++] = a[i]; cnt1++; } else { even[j++] = a[i]; cnt2++; } } odd[k++] = '\0'; even[j++] = '\0'; sort(odd, odd + cnt1); sort(even, even + cnt2, compare); if(cnt1 >= cnt2) { for(int m = 0; m < cnt2; m++) { a[m + m1] = odd[m]; a[m + m1 + 1] = even[m]; m1 = m1 + 1; } for(int i = 0; i < cnt1 - cnt2; i++) { a[2*cnt2 + i] = odd[i+cnt2]; } } else { for(int m = 0; m < cnt1; m++) { a[m + m1] = odd[m]; a[m + m1 + 1] = even[m]; m1 = m1 + 1; } for(int i = 0; i < cnt2 - cnt1; i++) { a[2*cnt1 + i] = even[i+cnt1]; } } a[n+1] = '\0'; } int main() { int a[10] = {2, 3, 14, 6, 2, 15, 12, 14, 4, 11}; Sorted(a,10); for(int i = 0; i<10-1; i++) cout << a[i] << " "; cout << a[10-1] << endl; return 0; }
调试中易犯的错误:
①不要忘记odd[k++] = '\0' even[j++] = '\0'
②这里需要注意组织整理存放数据的时候,一定要区分于《华为招聘机试整理7:给定一个数组input[]》这道题目,m1这里是加1,这里特别容易犯错,因为我们m每次循环的时候都加了1
③不要忘记a[n+1] = '\0'切记不能写成a
= '\0'
③对于整型数组主函数的时候,一定要注意个数n需要标识,如果嫌麻烦,我们直接给具体数字④对于这里也可以采用申请动态内存空间来保存奇数数组和偶数数组
int *odd = (int *)malloc(sizeof(int)
* n);
int even = (int *)malloc(sizeof(int) *
n);
相关文章推荐
- 华为招聘机试整理14:数组奇数偶数排序
- 华为招聘机试整理3:数组比较
- 华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数
- [华为机试]求出数组中所有奇数之和以及所有偶数之和
- 华为招聘机试整理2:判断一个数组的元素是否是回文
- 华为招聘机试整理7:给定一个数组input[]
- [华为机试]求出数组中全部奇数之和以及全部偶数之和
- 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。 .
- 把数组里面的 奇数 放在 偶数 前面 并排序
- 华为招聘机试整理13:算分数的问题
- 华为招聘机试整理9:输入一个字符串,用指针求出字符串的长度
- 2015年华为提前招聘机试题--奇数偶数排序(奇数偶数不同排序)
- 实现把数组里面的奇数排在偶数前面,并且排序。
- 快速排序(一个数组先做偶数排序后做奇数排序)
- 华为招聘机试整理12:合并字符串
- 【九度OJ1516】|【剑指offer14】调整数组顺序使奇数位于偶数前面
- 华为招聘机试整理1:删除子串
- 华为招聘机试整理15:约瑟夫环
- 《剑指Offer》读书笔记---面试题14:调整数组顺序使奇数位于偶数前面