这道题的测试点是错误的。巧合的是,我提交的代码忘记加 & 了,所以意外的过了。下面给出的代码是正确代码而不是AC代码,想要过这道题,只要把两个递归函数的 & 去掉就行了。(当然,printf大法好=。=)
时间限制: 1 Sec 内存限制: 1000 MB
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
输入
输入:
1 2 3 4 5
输出
输出:
5 4 3 2 1
样例输入
1 2 3 4 5 6
样例输出
6 5 4 3 2 1
#include <iostream>
using namespace std;
#include <stack>
stack<int> st;
void putss(stack<int> &st,int n)
{
if(st.empty())
{
st.push(n);
return;
}
int temp = st.top();
st.pop();
putss(st,n);
st.push(temp);
}
void nizhi(stack<int> &st)
{
if(st.size() == 1)
return ;
int temp = st.top();
st.pop();
nizhi(st);
putss(st,temp);
}
int main()
{
int n;
while(cin>>n)
st.push(n);
nizhi(st);
while(!st.empty())
{
cout<<st.top()<<" ";
st.pop();
}
}