交 换
题目描述
给你一个长度为n的数组a。您可以执行任意次以下操作:
选择数组中任意两个位置整数i和j(1≤i,j≤n),并且ai+aj是奇数,那么你可以交换ai和aj。
你的任务是求出按字典顺序最小的数组是什么?
提示:按字典顺序最小是指:先比较第一个数,如果第一个数相同,那么接着比较第二个数,如果第二个数相同,那么再比较第三个数,直到比出大小为止。例如:123<132,第二个数可以比出大小,数组123最小。
输入
第一行输入整数n(1≤n≤),表示数组a中的总个数。
第二行输入n个用空格分隔的整数a1,a2,…,an(1≤ai≤),分别表示数组a的每个元素。
输出
输出只有一行,包含n个用一个空格分隔的整数,表示您可获得的按字典顺序最小的数组。
样例输入
【样例1】 3 4 1 7 【样例2】 2 1 1
样例输出
【样例1】 1 4 7 【样例2】 1 1
提示
样例1解释:由于1+4=5,所以我们可以交换元素1和4。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;vector<int>a(n);bool hasodd=false,haseven=false;for(int i=0;i<n;i++){cin>>a[i];if(a[i]%2)hasodd=true;else haseven=true;}if(haseven&&hasodd){sort(a.begin(),a.end());}for(int i=0;i<n;i++){cout<<a[i]<<" ";}return 0;
}
注:1.如果数组内元素全为奇数或全为偶数,那么这个数组内没有两元素可以交换位置。
2.如果数组内既有奇数又有偶数,那么该数组可以通过交换操作获取任意字典序。
3.整数字典序与字符串字典序不同。