zoukankan      html  css  js  c++  java
  • 队列训练

    队列训练

     题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/C

       题目:

    Description

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

    Input

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

    Output

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

    Sample Input

    2
    20
    40
     

    Sample Output

    1 7 19
    1 19 37
     

     题解:

          将n个士兵的编号用一个数组记入,后从i(1~n)依次对2或3进行除运算(2,3交替进行),

    如果余数不为0的数,用标号数组下标为i-1的数将编号数组进行更新。如此循环直到编号数组的数(队列中的士兵数)小于等于3时结束循环。

    代码:

    #include<iostream>
    using namespace std;
    int a[5000];
    int main()
    {
    int i,t,n,j,b;
    cin>>t;
    while(t--)
    {
    cin>>n;b=2;j=n;
    for(i=0;i<n;i++)
      a[i]=i+1;
    while(n>3)
    {  j=0;i=1;
        while(i<=n)
        { if(i%b!=0)
            {a[j]=a[i-1];
               j++; }
               i++;
               }
           n=j;
        if(b==2)  b=3;
        else   b=2;
     }
    for(i=0;i<n-1;i++)
    cout<<a[i]<<' ';
    if(i==n-1)
    cout<<a[i]<<endl;
    }
    return 0;
    }
     
  • 相关阅读:
    Cenots6.5 安装 Intel I219-V 网卡驱动
    nginx的安装
    NGINX 简介
    HTTP 并发响应模型
    日志相关的服务器参数详解:
    使用mysqlbinlog提取二进制日志(zz)
    浅谈mysql日志
    mysql DDL&DML 语言
    fastcgi与cgi的区别(zz)
    基于rancher部署Spring-cloud微服务系统
  • 原文地址:https://www.cnblogs.com/fenhong/p/4674729.html
Copyright © 2011-2022 走看看