码迷,mamicode.com
首页 > 其他好文 > 详细

华为历年真题(数组题6)

时间:2014-06-28 09:37:42      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os      name   

对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,

奇数和偶数交叉着放且输出数组第一位放奇数,若奇数和偶数不等长,则把剩下的直接放到数组中。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
bool cmp(int &a,int &b)
{

  return (a>b);
}


void changnum(int *input,int n,int *output)
{
   vector<int> vecOdd,vecEven;//Odd存放奇数、Even存放偶数
   for(unsigned i=0;i<n;i++)
   {
     if(input[i]%2==0)
        vecEven.push_back(input[i]);
     else
        vecOdd.push_back(input[i]);
   }
   sort(vecOdd.begin(),vecOdd.end());//奇数按升序排列
   sort(vecEven.begin(),vecEven.end(),cmp);//偶数按降序排列
   
   unsigned len1=vecOdd.size(),len2=vecEven.size();
   unsigned k1=0,k2=0,j=0;
   while(k1<len1 && k2<len2)
   {
     output[j++]=vecOdd[k1++];
     output[j++]=vecEven[k2++];
   }
   while(k1<len1)
     output[j++]=vecOdd[k1++];
    while(k2<len2)
     output[j++]=vecEven[k2++];

}

void main()
{
    const int n=6;
    int input[n]={1,3,5,7,9,0};
    int output[n];
    changnum(input,n,output);
    for(int i=0;i<n;i++)
        cout<<output[i]<<" ";
    cout<<endl;
}

思路:用2个vector<int>分别存储奇数和偶数,用#include<algorithm>中自带的sort进行排序,看看自己编写的sort中cmp的写法。对于vector<int>的

下标,用unsigned类型就行。这个unsigned对于string的下标等也可以用,可以通用。

华为历年真题(数组题6),布布扣,bubuko.com

华为历年真题(数组题6)

标签:style   blog   color   os      name   

原文地址:http://www.cnblogs.com/Xylophone/p/3811006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!