Colección de citas famosas - Slogan de motivación - ¿Cuál es la base de la función next_permutation en la biblioteca STL de C++? Mira algunos conjuntos de números.

¿Cuál es la base de la función next_permutation en la biblioteca STL de C++? Mira algunos conjuntos de números.

/*Esta es una función que encuentra la siguiente permutación del tipo, puede recorrer toda la permutación e incluir el archivo de encabezado

La función exactamente opuesta es prev_permission */

// ( 1)?int? Siguiente _Sustitución de tipo

int? principal()

{

int? a[3];

a[0]= 1; a[1]= 2; a[2]= 3;

Hacer

{

cout & lt& lta[0]& lt;& lt"?"& lt& lta[1]& lt;& lt"?"& lt& lta[2]& lt;& ltendl

}?¿Cuándo? (siguiente_permutación (a, a+3));? // El parámetro 3 se refiere a la longitud a organizar.

//Si hay una permutación después, devuelve verdadero. Si A es la última permutación sin un sucesor, devuelve falso. Cada vez que se ejecuta, A se convierte en su sucesor.

}

Salida:

1?2?三

1?3?2

2? 1?三

2?3?1

3?1?2

3?2?1

¿Qué pasa si es reemplazado? while(next_permutation(a, a+2));

Luego genera:

1?2?三

2?1?三

Los diccionarios sólo clasifican los dos primeros elementos.

Evidentemente, ¿y si fuera sustituido? while(siguiente_permutación(a, a+1));? Sólo salida: 1? 2? Tres

Si la permutación es la más grande y no tiene sucesor, next_permutation ordenará la permutación en orden ascendente del diccionario, lo que equivale a un bucle.

int? lista[3]={3, 2, 1};

next_permutation(lista, lista+3);

cout & lt& ltlist[0]& lt;& lt" ? "& lt& ltlist[1]& lt;& lt"?"& lt& ltlist[2]& lt;& ltendl

//Salida:? 1?2?三

(2)?Char? Siguiente _Sustitución de tipo

int? Señor()

{

¿Ciel? ch[205];

cin? >>? ch;

Sort(ch,ch?+?strlen(ch)?);

//Esta declaración ordena la matriz de entrada en orden ascendente del diccionario. Por ejemplo, ingrese 9874563102? cout<<ch;? Generará 0123456789, por lo que se puede generar el arreglo completo.

¿Ciel? *¿primero? =?ch;

¿Carácter? *¿por fin? =?ch? +?strlen(ch);

¿Qué hacer? {

cout & lt& lt? ¿ch? <<? endl

} while(next_permutation(first, last));

¿Regresar? 0;

}

// De esta manera, no es necesario saber el tamaño del canal de antemano, sino ordenar toda la cadena de canales.

//¿Y si adoptamos? while(siguiente_permutación(ch, ch+5));? Si simplemente ingresa 1562, obtendrá un error porque el quinto elemento en ch apunta a desconocido.

//Para ordenar toda la cadena, el parámetro 5 se refiere a la longitud de la matriz sin terminador.

(3)?¿Cadena? Siguiente _Sustitución de tipo

int? main()

{

¿Cadena? Línea;

Y (CIN>>Línea y línea. & amp línea!="#")

{

if(next_permutation(line .begin() , línea.end()))? //Comienza desde la posición de entrada actual

cout & lt& ltline & lt& ltendl

¿Y si? cout & lt& lt"sin sucesor\n";

}

}

int? main()

{

¿Cadena? Línea;

Y(CIN>>Line&Line.& LINE!="#")

{

sort(line.begin (), línea . end( )); // Disposición completa

cout & lt& ltline & lt& ltendl

while(next _ permutation(line . Begin(), line.end ()))

cout & lt& ltline & lt& ltendl

}

}

¿Next_arrange? Función de comparación personalizada

# include & ltiostream & gt? //poj? 1256?Anagramas

# include & ltString& gt

# include & ltAlgorithm& gt

¿Usar? ¿Espacio de nombres? std

int? cmp(char? 一, char? b)? //' A ' & lt; a ' & ltB ' & ltb ' & lt...& ltZ ' & ltz '.

{

if(tolower(a)!=tolower(b))

¿Volver? bajar(a)<bajar(b);

Otros

¿Volver? a<b;

}

int? Señor()

{

¿Ciel? ch[20];

int? n;

CIN>& gtn;

mientras(n -)

{

scanf("%s ", ch) ;

sort(ch, ch+strlen(ch), CMP);

Hacer

{

printf(" %s \n ",ch);

} while(next_permutation(ch,ch+strlen(ch),CMP));

}

¿Regresión? 0;

}