题目链接

题目描述
小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:

while(!Q.empty()) //队列不空,执行循环

{

int x=Q.front();            //取出当前队头的值x

Q.pop();                 //弹出当前队头

Q.push(x);               //把x放入队尾

x = Q.front();              //取出这时候队头的值

printf("%d\n",x);          //输出x

Q.pop();                 //弹出这时候的队头

}

做取出队头的值操作的时候,并不弹出当前队头。
小明同学发现,这段程序恰好按顺序输出了1,2,3,...,n。现在小明想让你构造出原始的队列,你能做到吗?[注:原题样例第三行5有错,应该为3,以下已修正]

#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
int main()
{
    int T,n;
    cin>>T;
    while(T--)
    {
        cin>>n;
        queue<int> q;
        stack<int> s;
        int push_num=n;
        while(q.size()!=n)
        {
            q.push(push_num);
            int x=q.front();
            q.pop();
            q.push(x);
            push_num--;
        }
        while(!q.empty())
        {
            s.push(q.front());
            q.pop();
        }
        cout<<s.top();
        s.pop();
        while(!s.empty())
        {
            cout<<" "<<s.top();
            s.pop();
        }
        cout<<endl;
    }
    return 0;    
} 
Last modification:September 20th, 2019 at 11:56 pm
如果觉得我的文章对你有用,请随意赞赏