• 士兵队列训练问题


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

    Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 
    Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 
    Sample Input

    2
    20
    40

    Sample Output

    1 7 19
    1 19 37

    水题
     1 #include <iostream>
     2 
     3 using namespace std;
     4 #include<stack>
     5 #include<stdio.h>
     6 #include<math.h>
     7 #include<string.h>
     8 #include<map>
     9 #include<queue>
    10 int main()
    11 {
    12     int t,a[5010],n,i;
    13     cin>>t;
    14     while(t--)
    15     {
    16         cin>>n;
    17         if(n==1)
    18         {
    19             cout<<"1"<<endl;
    20             continue;
    21         }
    22         if(n==2)
    23         {
    24             cout<<"1 2"<<endl;
    25             continue;
    26         }
    27         if(n==3)
    28         {
    29             cout<<"1 2 3"<<endl;
    30             continue;
    31         }
    32         for(i=1;i<=n;i++)
    33             a[i]=1;
    34         int sum=10086;
    35         int add;
    36         while(sum>3)
    37         {
    38             add=0;
    39             sum=0;
    40             for(i=1;i<=n;i++)
    41             {
    42                 if(a[i]==1)
    43                     {
    44                         add++;
    45                         if(add%2==0)
    46                             {
    47                                 a[i]--;
    48                                 //cout<<i<<"****"<<add<<endl;
    49                             }
    50                     }
    51             }
    52             for(i=1;i<=n;i++)
    53             {
    54                 if(a[i]==1)
    55                     sum++;
    56             }
    57             if(sum<=3)
    58                 break;
    59             add=0;
    60             sum=0;
    61             for(i=1;i<=n;i++)
    62             {
    63                 if(a[i]==1)
    64                     {
    65                         add++;
    66                         if(add%3==0)
    67                             {
    68                                 a[i]--;
    69                                 //cout<<i<<"****"<<add<<endl;
    70                             }
    71                     }
    72             }
    73             for(i=1;i<=n;i++)
    74             {
    75                 if(a[i]==1)
    76                     sum++;
    77             }
    78             if(sum<=3)
    79                 break;
    80         }
    81         int flag=1;
    82         for(i=1;i<=n;i++)
    83         {
    84             if(a[i]==1)
    85             {
    86                 if(flag)
    87                 {
    88                     flag=0;
    89                     cout<<i;
    90                     continue;
    91                 }
    92                 cout<<' '<<i;
    93             }
    94         }
    95         cout<<endl;
    96     }
    97     return 0;
    98 }
    View Code
  • 相关阅读:
    前端切图|点击按钮div变色
    当鼠标聚焦时输入框变色(focus事件实例)
    jedate-开始使用一款好用的时间插件
    jedate-开始使用一款好用的时间插件
    前端切图|点击按钮div变色
    当鼠标聚焦时输入框变色(focus事件实例)
    ajax实现简单的点击左侧菜单,右侧加载不同网页
    装饰者模式(Decorator、Compoment)(早餐销售装饰,动态添加职责)
    原型模式(Prototype)(对象、克隆广告邮件)
    hashcode
  • 原文地址:https://www.cnblogs.com/dulute/p/7272466.html
Copyright © 2020-2023  润新知