题目
题目链接
题解
题目难度:简单
知识点:数组、容器、交换函数
解题思路:整体解题方法比较多,保存数据首先想到使用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]);elsearray2.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);elsearray.push_front(n);}deque<int>::iterator it;for(it = array.begin();it!=array.end();it++)cout<<*it<<" ";return 0;
}