zoukankan      html  css  js  c++  java
  • 【队列】飞盘游戏

    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; 
        }
    }                                 

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

    越努力越幸运~
  • 相关阅读:
    Spring MVC与JAX-RS比较与分析
    JDK历史版本下载
    第六篇:为多态基类声明虚析构函数
    第五篇:明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数
    第四篇:了解 C++ 默默编写并调用的函数
    第三篇:确保对象在被使用前的初始化
    poj 2125(最小割)
    hdu 4704(费马小定理)
    hdu 4705(树形DP)
    poj 3469(网络流模版)
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4064182.html
Copyright © 2011-2022 走看看