zoukankan      html  css  js  c++  java
  • 士兵队列训练问题

     
    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 }
  • 相关阅读:
    spark编译
    使用MapReduce实现两个文件的Join操作
    响应式 Web 设计
    响应式 Web 设计
    900W+数据只用300ms搞定!SQL查询优化这样做最快耗时347ms
    响应式 Web 设计
    CSS3 多媒体查询实例
    CSS3 多媒体查询:查找设备的类型,CSS3 根据设置自适应显示
    CSS3 弹性盒子(Flex Box):确保元素拥有恰当的行为的布局方式
    CSS3 框大小:padding(内边距) 和 border(边框)
  • 原文地址:https://www.cnblogs.com/lsb666/p/5679223.html
Copyright © 2011-2022 走看看