oj1060: salida de pila legal
Titulo original
Análisis y código
El requisito del sujeto es generar toda la secuencia de la pila, por lo que si usamos la pila para simular esta situación, básicamente no habrá ningún error, pero es contraproducente, no importa cómo se escriba el código, los resultados obtenidos no pueden cumplir con los requisitos y finalmente se realizan en intentos continuos. El código, por supuesto, también se refiere a algunos otros códigos, el siguiente es el análisis: el
código de CA se adjunta a continuación:
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int n;
void solve(queue<int>a1, stack<int>s, queue<int>a2);
void one(queue<int>a1, stack<int>s, queue<int>a2);
void two(queue<int>a1, stack<int>s, queue<int>a2);
int main()
{
queue<int> a1;
stack<int> s;
queue<int> a2;
while(cin>>n)
{
for (int i=1;i<=n;i++)
a1.push(i);
solve(a1, s, a2);
for (int i=0;i<n;i++)
a1.pop();
}
return 0;
}
void solve(queue<int>a1, stack<int>s, queue<int>a2)
{
if(a1.empty()&&s.empty())
{
while(!a2.empty())
{
cout << a2.front();
a2.pop();
}
cout << endl;
return;
}
two(a1, s, a2);
one(a1, s, a2);
}
void one(queue<int>a1, stack<int>s, queue<int>a2)
{
if(a1.empty())
return;
s.push(a1.front());
a1.pop();
solve(a1,s,a2);
}
void two(queue<int>a1, stack<int>s, queue<int>a2)
{
if(s.empty())
return;
a2.push(s.top());
s.pop();
solve(a1,s,a2);
}
Adjunta los resultados:
Si te ayuda, ¡también podrías darle un pulgar hacia arriba!