网易有道2017内推编程题 队列操作(映射)

题目来源:
网易有道2017内推编程题
http://www.nowcoder.com/test/question/done?tid=4707656&qid=46127#summary
描述:
小明同学把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。现在小明想让你构造出原始的队列,你能做到吗?
分析

方法一:映射

方法二:找规律

代码:(方法一)

#include <iostream>
#include <deque>
using namespace std;
int main()
{
	int n, k;
	cin >> k;
	while(k > 0)
	{
		deque<int> q;
		k--;
		cin >> n;
		for(int i = n; i > 0; i--)
		{
			q.push_front(i);
			int t = q.back();
			q.pop_back();
			q.push_front(t);
		}
		for(int i = 0; i < q.size(); i++)
			cout << q[i] << " ";
		cout << endl;
	}
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值