Dado un número M (entero de N dígitos) y operaciones de intercambio K (una operación de intercambio puede intercambiar 2 dígitos), ¿qué es un algoritmo para obtener el máximo entero posible?

#include
#include
vacío principal()
{
#include
#include
{
clrscr ();
int int temp, i, j, k, n, no, posición, p [20], dígitos, a [100];
cout << "Ingrese el número \ n";
cin >> no;
cout << "\ nIntroduzca el número de operaciones de intercambio \ n";
cin >> k;
n = no;
para (i = 0; n! = 0; i ++) n = n / 10;
dígitos = i; i- = 1;
n = no;
mientras que (n! = 0)
{
a [i -] = n% 10;
n = n / 10;
}
int z = -1;
para (i = 0; i <dígitos && k! = 0; i ++)
{posición = i;
para (j = i + 1; j <dígitos; j ++)
if (a [j]> a [i] && n == 0)
{
p [0] = j; z = 0;
n ++;
}
más si (a [j]> a [i] && a [j]> a [posición])
p [++ z] = j;
n = 0;
if (z> = 0 && a [i]> = a [i + 1])
{
temp = a [p [0]];
a [p [0]] = a [i];
a [i] = temp;
k–;
}
si no (z> = 0 && a [i] <a [i + 1])
{temp = a [p [z]];
a [p [z]] = a [i];
a [i] = temp;
k–;
}
z = -1;
}

para (i = 0; i <dígitos; i ++) cout << a [i];
getch ();
}
PD: agregué la parte int z pero es una parte esencial del programa.
Sin él, el programa no funcionará siempre cuando haya dígitos repetidos en
el entero de k dígitos dado

Así de simple
Seleccione el dígito más grande en el número y cámbielo por el primer dígito desde la izquierda.
Seleccione el segundo número más grande y cámbielo por el segundo dígito
Haga esto repetidamente hasta que se complete el número de operaciones de intercambio
Para optimizar la selección del número máximo, se puede generar un montón máximo