飞盘高手(水题)

 
     
 
Time Limit: 1sec    Memory Limit:256MB
Description

 杰克是美国某小镇有名的飞盘高手。他掷飞盘的时候有一个习惯,在一叠飞盘中,从第一个飞盘(即位于顶端的飞盘)开始,从上往下依次编号为1~N。当至少还有两个飞盘的时候,杰克通常会掷出一个飞盘,然后把新的第一个飞盘放到所有飞盘的最后。输入N,输出每次扔掉的飞盘,以及最后剩下的飞盘。

Input

 第一行为一个整数t(0<t<20),表示测试用例个数。以下t行每行包含一个整数n(0<n<40),为一个测试用例的飞碟数。

Output

 为每个测试用例单独输出一行,该行中依次输出每次掷出的飞盘编号以及最后剩下飞盘,每个飞盘后跟着一个空格。

Sample Input
 Copy sample input to clipboard
2
7
4
Sample Output
1 3 5 7 4 2 6
1 3 2 4

 

View Code
#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;

int main()
{
    int t, n;
    scanf("%d", &t);
    while (t--)
    {
        queue<int>q;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            q.push(i);
        while (q.size() > 1){
           printf("%d ", q.front());
           q.pop();
           q.push(q.front());
           q.pop();
        }
        printf("%d \n", q.front());
    }   
    return 0;
}

 

posted @ 2013-01-13 15:57  gumcstronger  阅读(374)  评论(0)    收藏  举报