美文网首页
ACM 之 A - 士兵队列训练问题(更新版)

ACM 之 A - 士兵队列训练问题(更新版)

作者: Gadore千里 | 来源:发表于2016-07-16 12:56 被阅读184次

Description

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

Input

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

Output

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

Sample Input

2
20
40

Sample Output

1 7 19
1 19 37

理解:

这道题整体意思就是说一定数量的士兵分别以1-2和1-3报数 , 报到二的出列 , 然后下一轮报道三的出列 . 这样一直循环到人数小于等于三时再把这三个人在第一轮所编排到的号码输出(所站位置)

做法

可以用一个数组 , 从1-n依次赋值,即为他们最后要输出的编号 , 然后 再编写1-2和1-3的循环体,判断条件可以写成if(n>3) ;
做了更新,上一个版本的代码实在是看不下去,太长,而且执行效率也不高,更可怕的是我自己都看不懂自己写的代码了。所以学了这么久之后换一个更容易懂得。
用队列。~ ~

代码部分

#include <cstdio>
#include <queue>
using namespace std;
int a[50001],f,t,n,ff;
queue<int>q;
void sortt(int x){
    int s=q.size();
    for(int i=1;i<=s;i++){
        if(i%x==0)q.pop();
        else{
                q.push(q.front());
                q.pop();
            }
    }
}
int main(){
    while(!q.empty())q.pop();
    while(scanf("%d",&t)!=EOF){
        while(t--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++)q.push(i);
            f=1;
            while(q.size()>3){
                if(f==1){
                    f=0;
                    sortt(2);
                    continue;
                }
                if(f==0){
                    f=1;
                    sortt(3);
                    continue;
                }
            }ff=0;
            while(!q.empty()){
                if(ff==1){
                    printf(" %d",q.front());
                    q.pop();
                }
                else{
                    ff=1;
                    printf("%d",q.front());
                    q.pop();
                }
            }
            printf("\n");
        }
    }
}

相关文章

  • ACM 之 A - 士兵队列训练问题(更新版)

    Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头...

  • 杭电acm1276 士兵队列训练问题

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory...

  • ACM 之 J - 迷宫问题

    Description 定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1...

  • ACM 之 H - N皇后问题

    Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一...

  • 【acm】博弈问题

    整理了一些acm博弈问题 (一)巴什博奕(Bash Game)(【转载】:链接): 只有一堆n个物品,两个人轮流从...

  • SUST ACM Summer Training(1)

    SUST ACM Summer Training(陕西科技大学 暑期ACM训练) 10道结构体和排序类型问题 题解...

  • ACM之开始

    经过激烈的竞争,终于获得免试研究生资格,我最终选择了直博。 在本次资格竞争中,我的加权排名很低,上机考试成绩也不怎...

  • ACM 之 A - The Snail

    Description A snail is at the bottom of a 6-foot well and...

  • ACM 之 A - 递推

    Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如,如果代码中出...

  • ACM输入+过桥问题

    {int a,b;while(scanf("%d %d",&a, &b) != EOF) // 输入结束时,sca...

网友评论

      本文标题:ACM 之 A - 士兵队列训练问题(更新版)

      本文链接:https://www.haomeiwen.com/subject/ifnyjttx.html