• 【队列】飞盘游戏


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

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

    越努力越幸运~
  • 相关阅读:
    rabbitmq 安装和配置
    rabbitmq
    Redis Keys 命令
    python pickle模块
    Redis之Python操作
    flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
    Python 并行分布式框架 Celery
    Celery+python+redis异步执行定时任务
    feed流拉取,读扩散,究竟是啥?
    DNS解析
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4064182.html
Copyright © 2020-2023  润新知