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