Clasificación de números enteros pares e impares: números impares de grandes a pequeños primero, números pares de pequeños a grandes segundos (aplicación de stable_partition)

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;
}

Supongo que te gusta

Origin blog.csdn.net/Cyril_KI/article/details/109557671
Recomendado
Clasificación