首页 > 代码库 > 【队列】飞盘游戏
【队列】飞盘游戏
Description
杰克是美国某小镇有名的飞盘高手。他掷飞盘的时候有一个习惯,在一叠飞盘中,从第一个飞盘(即位于顶端的飞盘)开始,从上往下依次编号为1,2,...,N。当至少还有两个飞盘的时候,杰克通常会掷出一个飞盘,然后把新的第一个飞盘放到所有飞盘的最后。输入N,输出每次扔掉的飞盘,以及最后剩下的飞盘。
Input
第一行为一个整数T(0<T<20),表示测试用例个数。
以下T行每行包含一个整数N(0<N<40),为一个测试用例的飞碟数。
Output
为每个测试用例单独输出一行,该行中依次输出每次掷出的飞盘编号以及最后剩下飞盘,每个飞盘后跟着一个空格。
Sample Input
274
Sample Output
1 3 5 7 4 2 61 3 2 4
Problem Source: 课程上机练习题
解题思路:
用队列来模拟实际情况
实现代码:
#include<iostream>#include<queue>using std::cout;using std::cin;using std::endl;using std::queue;int main() { int T, n, tmp; queue<int> q; cin >> T; for (; T > 0; T--) {//T个测例 cin >> n; for (int i = 0; i < n; i++) {//初始化栈,依次编号 q.push(i + 1); } for (int i = 0; q.size() > 2; ) { cout << q.front() << " "; //扔出飞盘,出栈队 q.pop(); q.push(q.front()); //下一个放到队尾 q.pop(); } if (q.size() == 2) { //只剩两个飞盘时,直接依次输出 cout << q.front() << " "; q.pop(); } cout << q.front() << " "; q.pop(); cout << endl; }}
(本博文或多或少参考过其他网上资料,但时间已久忘记当初的参考了,在此对他们表示感谢!)
【队列】飞盘游戏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。