题解

题目难度:简单

知识点:数组、容器、交换函数

解题思路:整体解题方法比较多,保存数据首先想到使用vector容器。第一种可以使用三个vector保存数据,第一个用来保存所有的数据,第二、三个分别保存奇偶数,然后输出即可;第二种使用swap函数,分别从左右搜索,左边遇到奇数就进行标记,右边遇到偶数进行标记,交换两个数,直至左标记到达右标记;第三种直接使用deque即可,因为deque具有两端可插入数据的特点,所有可以直接从左插入偶数,右端插入奇数即可。

方法一

使用多个vector保存数据,分别保存
1.第一个保存所有数据;
2.第二个保存从第一个中搜索出的奇数;
3.第三个保存从第一个搜索出的偶数;

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    vector<int> array;
    while(cin>>n)
        array.push_back(n);
    int size=array.size();
    vector<int> array1;
    vector<int> array2;
    for(int i=0;i<size;i++)
    {
        if(array[i]%2!=0)
            array1.push_back(array[i]);
        else
            array2.push_back(array[i]);
    }
    int size1=array1.size();
    int size2=array2.size();
    for(int i=0;i<size2;i++)
        cout<<array2[i]<<" ";
    for(int i=0;i<size1;i++)
        cout<<array1[i]<<" ";
    return 0;
}

方法二

因为对输出的就顺序没有特殊要求,只需要两个标记点分别从前、后同时所有,一个标记偶数,一个标记奇数。一旦确定好位置时就直接互调即可。整个搜索过程直至两个标记的碰面为止即搜索完整个数据。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n=0;
    vector<int> array;
    while(cin>>n)
        array.push_back(n);
    int size=array.size();
    int l=0,r=size-1;
    while(l<r){
        while(array[l]%2==0 && l<r)
            l++;
        while(array[r]%2!=0 && l<r)
            r--;
        swap(array[l],array[r]);
    }
    for(int i=0;i<size;i++)
        cout<<array[i]<<" ";
    return 0;
}

方法三

deque是一种特殊的容器,其特点是在数据保加载中,既可以从容器的首位置插入数据,也可以从数据的尾端插入数据,所以对此题具有很好的适用性。一端直接插入偶数,另一端直接插入奇数即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    deque<int>array;
    int n;
    while(cin>>n){
        if(n%2 != 0)
            array.push_back(n);
        else
            array.push_front(n);
    }
    deque<int>::iterator it;
    for(it = array.begin();it!=array.end();it++)
        cout<<*it<<" ";
    return 0;
}