新兵队列

Description

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

Input

本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

Output

共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

Sample Input

2 20 40

Sample Output

1 7 19 1 19 37

题目虽然容易单是list.erase();方法容易用错!!!!!!!!!!!!!

#include<iostream>
#include<list>
using namespace std;
int  main(){
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        list<int>x;
        for(int i=1;i<=n;i++)x.push_back(i);
        int i,t1=0;
        while(n>3){
                i=1;
            for(list<int>::iterator it=x.begin();it!=x.end();i++){
                if(i%(2+t1)==0){it=x.erase(it);n--;}
                else it++;
            }
            t1=1-t1;
        }
        list<int>::iterator it=x.begin();
        for(;it!=--(x.end());it++){
            cout<<*it<<" ";
        }
        cout<<*it<<endl;
    }
return 0;
}

时间: 2024-12-19 02:03:48

新兵队列的相关文章

ACM学习历程—HDU 1276 士兵队列训练问题(队列)

Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠 拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数...,以后从头开始轮流进行一至二报数.一至三报 数直到剩下的人数不超过三人为止. Input 本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000. Output 共有N行,分别对应输入的新兵人数,每行输出

[转载] 新兵训练营系列课程——平台服务部署及Web框架

原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平台Web框架简介 背景 目前整体架构大体上分为三层 展现层:手机端,主站和第三方应用,承担相关业务的前端展示 适配层:负责服务端和多个展示端的接口适配 服务层:提供基础功能服务,包括Feed服务,用户关系,开放平台和消息箱等 平台作为整个微博架构的基础功能服务层,对外以Http接口的方式提供服务.接

[转]新兵训练营系列课程——编写优雅代码

原文:http://weibo.com/p/1001643877361430185536 课程大纲 什么是好代码 如何编写优雅的代码 如何做出优雅的设计 如何规划合理的架构 如何处理遗留代码 什么是好代码 对于代码质量的定义需要于从两个维度分析:主观的,被人类理解的部分:还有客观的,在计算机里运行的状况. 我把代码质量分为五个层次,依次为: 完成功能的代码 高性能的代码 易读的代码 可测试的代码 可扩展的代码 如何编写可读的代码 在很多跟代码质量有关的书里都强调了一个观点:程序首先是给人看的,其

hdu 1276士兵队列问题【queue】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276 士兵队列训练问题                                               Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)                                                           

士兵队列训练问题 (队列+模拟)

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数...,以后从头开始轮流进行一至二报数.一至三报数直到剩下的人数不超过三人为止. Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000. Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有

redis 学习 四 队列

<?php /** * redis实战 * * 利用列表list实现简单队列 * * @example php cache.php */ header('content-type:text/html;chaeset=utf-8'); $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 进队列 $userId = mt_rand(000000, 999999); $redis->rpush('QUEUE_NAME',j

构建队列,数组版本

队列作为基本的数据结构,是每个coder所必须掌握的. 队列在逻辑上就像是一条打饭的长队,排在前面的先打到饭(先进先出). 这里用一个数组用以构造一个队列,并设置两个指向,head指向队首,tail指向队尾,初始状态是head与tail指向同一位置(队列为空) 队列有两个操作:入队与出队. 1.入队:对比打饭排队的场景,新来的人排在后面,这是队尾tail需向后移一位. 2.出队:已经打好饭的人就可以出去了,这时队头也需向后移一位,让后面的人成为队头. 注意: 当head与tail都移到数组末端,

链队列代码及应用

链队列代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; typedef struct Qnode{ int

caffe数据读取的双阻塞队列说明

caffe的datareader类中 class QueuePair { public: explicit QueuePair(int size); ~QueuePair(); BlockingQueue<T*> free_; BlockingQueue<T*> full_; DISABLE_COPY_AND_ASSIGN(QueuePair); }; 这个就是双阻塞队列,先将free队列填充到最大长度,然后按照如下规则: 1,每当生产者push时,先将full队列pop,如果fu