説明
10個の整数のシーケンスがある場合、それらを並べ替える必要があります。並べ替えの要件:1。奇数が最初で、偶数が最後です。2。奇数が最大から最小に並べ替えられます。3。偶数が最小から最大に並べ替えられます。
入力
スペースで区切って10個の整数の行を入力します。各整数の範囲は、0以上100以下です。
出力は
要件に従ってソートされ、ソート後に10個の整数を含み、数値の間のスペースで区切られた行を出力します。
サンプル入力:4 7 3 13 11 12 0 47 34 98
サンプル出力:47 13 11 7 3 0 4 12 34 98
1.stable_partitionの概要
stable_partitionは、C ++ソート関数のブランチであり、特定のルールを満たすパーツを最上位に配置するために使用されます。たとえば、この質問では、奇数を前に、偶数を後ろに配置する必要があります。
2.操作手順
安定したパーティションの申請フォームは次のとおりです。
vector<int>::iterator it=stable_partition(a.begin(),a.end(),cmp);
cmpは比較関数です。
bool cmp(int &x) {
return x % 2; //奇数放在前面
}
1を返すと、xは奇数、つまり奇数が前に配置され、返されるのは後半の開始位置、つまり偶数の開始位置になります。
3.この質問のアイデアの分析
安定したパーティションを使用して、前に奇数、後ろに偶数を配置し、前半を大から小、後半を小から大の2つの部分でそれぞれ並べ替え関数を使用します。
4.ACコード
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
bool cmp(int &x) {
return x % 2; //奇数放在前面
}
int main() {
int t;
for(int i = 0; i < 10; i++) {
cin >> t;
a.push_back(t);
}
vector<int>::iterator it=stable_partition(a.begin(),a.end(),cmp);
sort(a.begin(), it, greater<int>());
sort(it, a.end(), less<int>());
for(vector<int>::iterator iter=a.begin(); iter!=a.end(); iter++) {
cout << *iter << ' ';
}
return 0;
}