• 士兵队列训练报数问题


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

    题意:

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

           输入行:多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

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

    案例:

           Sample Input

           2

           20

           40

           Sample Output

           1 7 19

           1 19 37

    分析:

           给士兵编号,若出列,则编号变为0,进行一次出列后进行人数检验,若不多于三人结束出列语句循环,注意输出格式控制,具体实施步骤如下:

    源代码:

     1 #include<stdio.h>
     2 const int maxm=5005;
     3 int a[maxm];
     4 int main()
     5 {
     6     int N,T,k,i,j;
     7     scanf("%d",&N);//案例数 
     8     while(N--)
     9     {
    10         scanf("%d",&T);//士兵人数
    11         k=T;
    12         for(i=1;i<=T;i++)//士兵编号
    13             a[i]=i;
    14         while(k>3)//士兵出队后人数判断语句
    15         {
    16             j=0;
    17             for(i=1;i<=T;i++)
    18             {
    19                 if(a[i]==0) continue;//判别该编号士兵是否已出列
    20                 else j++;
    21                 if(j==2)//报2士兵出列
    22                 {  a[i]=0;
    23                    j=0;
    24                 }
    25             }
    26             k-=k/2;//报2出列后剩余人数
    27             if(k<=3) break;//士兵报2出队后人数判断语句
    28             j=0;
    29             for(i=1;i<=T;i++)
    30             {
    31                 if(a[i]==0) continue;//判别该编号士兵是否已出列
    32                 else j++;
    33                 if(j==3)//报3士兵出列
    34                 {  a[i]=0;
    35                    j=0;
    36                 }
    37             }
    38             k-=k/3;//报3出列后剩余人数
    39         }
    40         for(i=1;i<=T;i++)
    41         {
    42             if(a[i]==0) continue;//判断士兵出队
    43             else //输出格式控制
    44             {   k--;
    45                 if(k>0)
    46                  printf("%d ",a[i]);
    47                 else printf("%d
    ",a[i]);
    48             }
    49         }
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    2017国家集训队作业[agc006f]Blackout
    2017国家集训队作业[agc004f]Namori
    2017国家集训队作业[agc016b]Color Hats
    2017国家集训队作业[arc082d]Sandglass
    2017国家集训队作业[arc076d/f][Exhausted?]
    2017国家集训队作业[agc006e]Rotate 3x3
    2017国家集训队作业[agc014d]Black and White Tree
    2017国家集训队作业[agc008f]Black Radius
    数学竞赛
    [BZOJ4555 TJOI2016 HEOI2016 求和]
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4676058.html
Copyright © 2020-2023  润新知