zoukankan      html  css  js  c++  java
  • 华为招聘机试整理14:数组奇数偶数排序

    华为招聘机试整理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++] = '';
        even[j++] = '';
    
        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] = '';
    }
    
    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++] = '' even[j++] = ''
    ②这里须要注意组织整理存放数据的时候。一定要区分于《华为招聘机试整理7:给定一个数组input[]》这道题目,m1这里是加1。这里特别easy犯错,由于我们m每次循环的时候都加了1
    ③不要忘记a[n+1] = ''切记不能写成a[n] = ''
    ③对于整型数组主函数的时候。一定要注意个数n须要标识,假设嫌麻烦,我们直接给详细数字④对于这里也能够採用申请动态内存空间来保存奇数数组和偶数数组
    int *odd = (int *)malloc(sizeof(int) * n);
    int
    even = (int *)malloc(sizeof(int) * n);


  • 相关阅读:
    mybatis学习笔记
    markdownPad常用功能示例
    2018-2019-2 《Java程序设计》第3周学习总结
    2018-2019-2 《Java程序设计》第2周学习总结
    2018-2019-2 《Java程序设计》第1周学习总结
    Djnago models 一对多、多对多
    Superset 安装
    lvm 添加分区
    partprobe 重新检测Linux系统分区
    Docker 、Docker Compose 安装
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5090822.html
Copyright © 2011-2022 走看看