士兵队列训练问题

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    queue<int> qa;
    queue<int> qb;
    int T,N;
    int a;
    int lena,lenb;
    while (cin>>T)
    {
        while (T--)
        {
            cin>>N;
            for (int i=1;i<=N;i++)
            {
                qa.push (i);
            }
            if (qa.size ()<=3)
            {
                i=1;
                a=qa.size ();
                while (!qa.empty ())
                    {
                        cout<<qa.front ();
                        if (i!=a)
                        {
                            
                            cout<<" ";
                        }
                        i++;
                        qa.pop ();    
                    }
                cout<<endl;
            }
            else
            {

                while (1)
                {
                    for (i=1;!qa.empty ();i++)
                        {
                            if (i%2 != 0)
                            {
                                qb.push (qa.front ());                
                            }
                            qa.pop ();
                        }
                    if (qb.size ()<=3)
                    {
                        i=1;
                        a=qb.size ();
                //        cout<<a;
                        while (!qb.empty ())
                        {
                            
                            cout<<qb.front ();
                            if(i!=a)
                            {
                                cout<<" ";
                                
                            }
                            i++;
                            qb.pop ();    
                        }
                        cout<<endl;
                        break;
                    }
                    

                    for (i=1;!qb.empty ();i++)
                    {
                        if (i%3 != 0)
                        {
                            qa.push (qb.front ());
                        }
                        qb.pop ();
                    }
                    if (qa.size ()<=3)
                    {    
                        a=qa.size ();    
                        i=1;
                //        cout<<a;
                        while (!qa.empty ())
                        {
                            cout<<qa.front ();
                            if (i!=a)
                            {
                                
                                cout<<" ";
                            }
                            i++;
                            qa.pop ();    
                        }
                        cout<<endl;
                        break;
                    }
                }
            }
        
                
        }
    }
    return 0;
}
    

 

士兵队列训练问题

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 45   Accepted Submission(s) : 18

Font: Times New Roman | Verdana | Georgia

Font Size:

Problem Description

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

Input

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

Output

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

Sample Input

2
20
40

Sample Output

1 7 19
1 19 37
 
 **看清楚题目   
两个队列相互转换

posted on 2013-08-15 19:10  不知妖精  阅读(228)  评论(0编辑  收藏  举报

导航