华为招聘机试整理14:数组奇数偶数排序「建议收藏」

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116487.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • screenflow怎么录屏_mac录屏软件 带声音

    screenflow怎么录屏_mac录屏软件 带声音ScreenFlow8forMac是一款集屏幕录制和视频编辑为一体的软件,全新版本screenflowformac中文版已经更新,新版本带来跟踪缩略图、手绘注释、可拆卸编辑时间线、快速旁白和配音添加、刻录字幕等新功能,还有更多改进,赶紧来体验一下吧!ScreenFlow8forMac官方介绍ScreenFlow®是专为macOS设计的屡获殊荣的屏幕录制和视频编辑软件。凭借高质量的屏幕,视频,音频和iOS捕捉,极其强大的编辑功能以及新的StockMediaLibrary选项,

    2022年9月24日
    0
  • 系统可用性几个9

    系统可用性几个9经常看到各种技术文章或者分布式系统介绍说系统的可用性达到了多少个9,那么所谓”几个9“到底是怎么计算的?又意味着什么?我们简单计算分析下看看。所谓”1个9“是指90%,”2个9“是指99%,”3个9“是指99.9%,依次类推。可用性的反面是故障时间,网站或者分布式系统会因为很多原因导致不可用,比如:程序bug;运维更新错误;环境配置升级变化;机器硬件故障;被恶意攻击;网关不小心踢掉了网线/电源插座…

    2022年7月12日
    27
  • 第二课:基于树莓派的10个经典项目(树莓派能做什么)[通俗易懂]

    第二课:基于树莓派的10个经典项目(树莓派能做什么)[通俗易懂]第一课,我们解决了以下几个问题,即:1)树莓派长什么样2)为什么叫树莓派3)树莓派来自哪个国家4)树莓派的创始人是谁5)树莓派的使命6)树莓派的销量7)树莓派基金组织第二课:我们来了解树莓派能做什么树莓派能做什么,莫过于来看一遍树莓派的10个经典项目的视频了,…

    2022年6月10日
    48
  • Matlab求分段函数的积分[通俗易懂]

    Matlab求分段函数的积分[通俗易懂](一)前言本文介绍一个使用Matlab进行求分段函数积分值的方法。首先介绍如何使用int()对连续函数进行积分的求解,然后介绍一个对分段函数进行求积分的例子。(二)使用Matlab求定积分Matlab中求积分的函数为int(),调用形式为int(func,’x’,a,b),其中func为被积函数,x为积分变量,[a,b]为被积区间。如int(x^2,’x’,1,2…

    2022年6月9日
    70
  • 机器学习之类别性特征

    类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型。Sklearn中提供了几个转换器来处理文本属

    2021年12月30日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号