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;
    }
     
  • 相关阅读:
    C++用于修饰的keyword
    UVa 884
    yii 使用 mongodb 小工具 YiiMongoDbSuite
    三种网络协议握手
    学习设计模式的前世今生
    B二分法
    链接链接新手变化需要注意哪些问题
    插值与拟合 课件链接
    UVa 740
    疯狂暑期学习计划~~~
  • 原文地址:https://www.cnblogs.com/fenhong/p/4674729.html
Copyright © 2011-2022 走看看