YTU 2247: 颠倒栈(栈和队列)

这道题的测试点是错误的。巧合的是,我提交的代码忘记加 & 了,所以意外的过了。下面给出的代码是正确代码而不是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();
    }
}

猜你喜欢

转载自blog.csdn.net/qm230825/article/details/86551600
今日推荐