【队列】飞盘游戏

Description

杰克是美国某小镇有名的飞盘高手。他掷飞盘的时候有一个习惯,在一叠飞盘中,从第一个飞盘(即位于顶端的飞盘)开始,从上往下依次编号为1,2,...,N。当至少还有两个飞盘的时候,杰克通常会掷出一个飞盘,然后把新的第一个飞盘放到所有飞盘的最后。输入N,输出每次扔掉的飞盘,以及最后剩下的飞盘。

Input

第一行为一个整数T(0<T<20),表示测试用例个数。

以下T行每行包含一个整数N(0<N<40),为一个测试用例的飞碟数。

Output

为每个测试用例单独输出一行,该行中依次输出每次掷出的飞盘编号以及最后剩下飞盘,每个飞盘后跟着一个空格。

Sample Input

2
7
4

Sample Output

1 3 5 7 4 2 6
1 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;
    }
}                                 

(本博文或多或少参考过其他网上资料,但时间已久忘记当初的参考了,在此对他们表示感谢!)

时间: 2024-10-20 01:08:17

【队列】飞盘游戏的相关文章

HTML5+JS 《五子飞》游戏实现(一)规则

很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种益智游戏,我们先来看看棋盘布局: 规则如下: 一.黑白双方(对方黑,我方白)各执五子,分别摆放在双方的边线上: 二.棋子只能走直线(斜的直线也是),不能转弯: 三.只要前面没有棋子(任何一方的)就可以跳格走: 四.可以夹死对方一个或可以挑对方两个棋子(以1表示黑子,0表示白子,-表示空白): 夹一个:任何一条

HTML5+JS 《五子飞》游戏实现(五)移动棋子

上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位置,如果可以移动,则把棋子移动的目标位置,原来的位置就要清空. 上面这句话,我们要分两步来处理:1.判断目标是否可移动:2.可以移动则移动棋子. 1.判断目标是否可移动. 首先移动时只能按直线,其次目标位置与原始位置之间不能有其他棋子: // 是否可移动 this.canMove = functio

HTML5+JS 《五子飞》游戏实现(八)人机对战

要想实现人机对战,就必须让电脑自动下棋,而且要知道自动去查找对方的棋子,看看有没有可以挑一对的,有没有可以夹一个的,这样下起来才有意思. 当电脑用户下完棋后,电脑应立即搜索用户的棋子,然后如果没有被吃的,就再随机走一个棋子(要想让电脑成为下棋高手就不能随机下棋,要考虑下棋后会不会再被对方吃掉等等,这里只简单做随机下子了). 完整<五子飞>游戏人机对战:http://www.lyout.com/projects/Fiveflychess/FiveflyChess8.htm // 查找是否有可挑的

HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择

上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移开棋子后再切换回默认的状态: el.mousemove(function (e) { var o = el.offset(); var p = { x: e.clientX - o.left, y: e.clientY - o.top }; el.css("cursor", "d

HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对

在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 this.lines = [ [ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24], [ 0, 5, 10, 15, 20], [ 1, 6, 11, 16,

HTML5+JS 《五子飞》游戏实现(七)游戏试玩

前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:http://www.lyout.com/projects/fiveflychess/FiveflyChess7.htm 现在我们来总结一下该小游戏的一些基本定义: // 定义游戏对象 function GameChess(){ // 初始配置 this.init = function ()//... // 画棋

【浅谈社工】U盘游戏(上)

凡人是没有资格讨论社会工程学的,2333333333,接下来的浅谈也不过是为了研究下setoolkit平台的使用罢了,这个社工利用平台由parrot预装,其中大量模块调用msf平台,什么?又是msf??? 今天我们的标题是初识U盘游戏,因为笔者选购的装备还没到货,但先来一起探索一下U盘游戏在社会工程学中是如何运用的,更多花样敬请期待. 首先我们来看一下今天需要用到的工具——setoolkit. 需要root权限启动,不然会报错权限不足. 在每次启动的时候,/root/.set目录会自动清空并初始

C#基础:飞行棋游戏

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pachee { class Program { #region 静态字段 // 关卡数量 public static int[] Maps = new int[100]; // 玩家坐标 public static int[] PlayerPos

HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备

上一节 里沃特与我们分享了<五子飞>的下棋规则,可能有些伙伴看得不清楚,像我们码农还是看到代码比较靠谱.下面就把可以走棋的路线跟大家说一下. 假设从左上角开始,以0开始编号,往右数(没看第一节棋盘的先去看一下)(因为路线比较简单,就直接写固定的数据了): 1.横着走有5条直线: var lines_h = [ [ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22,