原题
分析和代码
题目要求是输出所有的出栈序列,因此如果我们用栈来模拟这个情况,那就基本不会出错,但是事与愿违,无论如何书写代码,得到的结果都不能满足要求,最终在不断尝试中实现了代码,当然也参考了一些其他的代码,下面给上分析:
下面附上AC的代码:
#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);
}
附上结果:
如果对您有所帮助的话,不妨点个赞呗!