• 士兵队列训练问题


     
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

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

    Input

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

    Output

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

    Sample Input

    2 20 40
     

    Sample Output

    1 7 19 1 19 37
     
    解题思路:本题属于简单题,没有特殊算法运用,只要照题意依次报数>出列>报数>出列,知道剩下的人不大于3个即可。
     1 #include<iostream>
     2 using namespace std;
     3 int f[5009];
     4 int main()
     5 {
     6     int t;
     7     int n,i;
     8     
     9     while(cin>>t)
    10     {
    11         while(t--)
    12         {
    13             cin>>n;
    14             for(i=1;i<=n;i++)
    15                 f[i]=i;
    16             int t;
    17             if(n<=3)
    18             {
    19                 printf("1");
    20                 for(i=2;i<=n;i++)
    21                     printf(" %d",i);
    22                 printf("\n");
    23                 continue;
    24             }
    25             while(1)
    26             {
    27                 int leap=0;
    28                 for(i=1;i<=n;i++)
    29                 {
    30                     if(f[i]!=-1)
    31                     {
    32                         leap++;
    33                     }
    34                     if(leap==2)
    35                     {
    36                         leap=0;
    37                         f[i]=-1;
    38                     }
    39                 }
    40                 t=0;
    41                 for(i=1;i<=n;i++)
    42                     if(f[i]!=-1)
    43                         t++;
    44                     
    45                     if(t<=3)
    46                         break;
    47                     
    48                     leap=0;
    49                     for(i=1;i<=n;i++)
    50                     {
    51                         if(f[i]!=-1)
    52                             leap++;
    53                         if(leap==3)
    54                         {
    55                             f[i]=-1;
    56                             leap=0;
    57                         }
    58                     }
    59                     t=0;
    60                     for(i=1;i<=n;i++)
    61                         if(f[i]!=-1)
    62                             t++;
    63                         if(t<=3)
    64                             break;
    65                         
    66             }
    67             for(i=1;i<=n;i++)
    68                 if(f[i]!=-1)
    69                 {
    70                     printf("%d",f[i]);
    71                     break;
    72                 }
    73                 i++;
    74                 for(;i<=n;i++)
    75                     if(f[i]!=-1)
    76                         printf(" %d",f[i]);
    77                     printf("\n");
    78         }
    79     }
    80     
    81     return 0;
    82 }
  • 相关阅读:
    log4j日志格式化
    日志级别是如何工作?
    Java拦截过滤器模式
    js实现图片轮播
    js实现表格的增删改查
    企业外贸网站建设的要求及注意事项
    逛知乎才知网站建设不只有wordpress建站系统,小白值得收藏
    三款适用于企业建站的CMS建站系统
    前端开发常用的网站整理
    网站建设教程:虚拟主机如何安装PageAdmin建站系统
  • 原文地址:https://www.cnblogs.com/lsb666/p/5679223.html
Copyright © 2020-2023  润新知