Red de conocimientos turísticos - Información de alquiler - Una pequeña programación interesante (una pila de N tarjetas)

Una pequeña programación interesante (una pila de N tarjetas)

¡Pruébalo tú mismo de nuevo cuando tengas tiempo!

#includelt;iostreamgt;

#includelt;vectorgt;

usando el espacio de nombres std;

int Jhpx(vectorlt;intgt;* , int, int*);

int main()

{

intgt n; , pd=0; //x cuenta el número de ciclos necesarios la próxima vez y pd determina si el primero se guarda o se descarta

//Si pd=0, el primero se descarta; de lo contrario, se guarda

p>

coutlt;lt;"Por favor, introduzca el número de tarjetas:";

cingt;gt;x;

for (int a= 1; alt; =x ; a )

{

n.push_back(a); //Asignación secuencial: 1 a x; p>

while (verdadero)

{

x=Jhpx(amp; n, x, amp; pd

if (x=); =1)

{

coutlt;lt;"La última tarjeta que queda es la original"lt;lt;n[0]lt;lt;" tarjeta numérica"lt;lt ;endl ;

descanso;

}

}

devuelve 0;

}

int Jhpx(vectorlt; intgt; *P, int x, int *pd)

{

int temp=0, save=0, del=0; save El número de veces, el número de eliminaciones

vectorlt; intgt; //Para intercambio temporal

if (*pd==0) // El primero es descartado

{

for (int a=1; alt; = x; a)

{

temp=a-1 ;

if (a2gt; 0) //Si es un número impar, deséchalo

{

(*P)[temp]=0;

del;

}

else //Por el contrario, almacenamiento temporal

{

tmp. push_back((*P)[temp]);

(*P)[temp]=0

guardar

}

<; p> }

for ( int b=0; blt; save; b) //Recuperar el contenedor original del almacenamiento temporal

{

(*P )[b]=tmp[b];

p>

}

if (delgt; save) //Aquí se juzga si se descarta la primera carta de la siguiente ronda

{

*pd =1;

}

más

{

*pd=0;

p>

}

}

else //Guarda la primera imagen

{

for (int a=1; alt;=x;a)

{

temp=a-1;

if (a2==0)

{

(*P)[temp]=0

del

}

más

{

tmp.push_back((*P)[temp]);

(*P)[temp]=0

guardar

;

}

}

para (int b=0; blt; guardar; b)

{

(*P )[b]=tmp[b];

}

if (delgt; guardar)

{

*pd=1 ;

}

más

{

*pd=0

}

<; p> }

regresar guardar;

}