数组操作
数组操作
http://www.nowcoder.com/questionTerminal/325483e19dab4609baf00157e5ebeb6f
题解
题目难度:简单
知识点:数组、容器、交换函数
解题思路:整体解题方法比较多,保存数据首先想到使用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; }