Descripción
Dada una secuencia de 10 enteros, es necesario reordenarlos. Requisitos de clasificación: 1. Los números impares van primero, los números pares son los últimos 2. Los números impares se ordenan de mayor a menor 3. Los números pares se ordenan de menor a mayor.
Entrada
Ingrese una línea de 10 enteros, separados por un espacio, y el rango de cada entero es mayor o igual a 0 y menor o igual a 100.
La salida se
ordena de acuerdo con los requisitos y genera una fila, que contiene 10 números enteros después de la clasificación, separados por un espacio entre los números.
Entrada de muestra: 4 7 3 13 11 12 0 47 34 98
Salida de muestra: 47 13 11 7 3 0 4 12 34 98
1. Introducción a stable_partition
stable_partition es una rama de la función de clasificación de C ++, que se utiliza para colocar la parte que cumple una determinada regla en la parte superior. Por ejemplo, esta pregunta requiere que los números impares se coloquen al frente y los números pares al reverso.
2. Pasos operativos
El formulario de solicitud de stable_partition es:
vector<int>::iterator it=stable_partition(a.begin(),a.end(),cmp);
cmp es una función de comparación:
bool cmp(int &x) {
return x % 2; //奇数放在前面
}
Devolver 1 significa que x es un número impar, es decir, el número impar se coloca al frente y el devuelto es la posición inicial de la segunda mitad, es decir, la posición inicial del número par.
3. Análisis de la idea de esta pregunta
Use stable_partition para poner los números impares al frente y los números pares al final, y luego use la función de clasificación en las dos partes respectivamente, la primera mitad de grande a pequeña y la segunda mitad de pequeña a grande.
4. Código de CA
#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;
}