閱讀576 返回首頁    go 阿裏雲 go 技術社區[雲棲]


算法訓練-卡片遊戲

Description
桌上有一疊牌,從第一張牌(即位於頂麵的牌)開始從上往下依次編號為1~n。當至少還剩兩張牌時進行以下操作:把第一張牌扔掉,然後把新

的第一張放到整疊牌的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌。

Input
第一行為一個整數t(0<t<40),表示測試用例個數。以下t行每行包含一個整數n(0<n<40),為一個測試用例的牌數。

Output
為每個測試用例單獨輸出一行,該行中依次輸出每次扔掉的牌以及最後剩下的牌,每張牌後跟著一個空格。

Sample Input


4
Sample Output
1 3 5 7 4 2 6 
1 3 2 4

 

此題用來練習C++中STL的queue隊列
queue模版類的定義在<queue>頭文件中。
queue與stack模版非常類似,queue模版也需要定義兩個模版參數,一個是元素類型,一個是容器類型,元素類型是必要的,容器類型是可選的

,默認為dqueue類型。
定義queue對象的示例代碼如下:
queue<int>q1;
queue<double>q2;
queue的基本操作有:
1.入隊:如q.push(x):將x元素接到隊列的末端;
2.出隊:如q.pop() 彈出隊列的第一個元素,並不會返回元素的值;
3,訪問隊首元素:如q.front()
4,訪問隊尾元素,如q.back();
5,訪問隊中的元素個數,如q.size();
6.檢查隊列是否為空,如q.empty();


AC代碼:

#include<stdio.h>
#include<queue>
using namespace std;
queue<int>q;
int main()
{
    int i,j,n,m;
    scanf("%d",&n);
    while(n--)
    {
       scanf("%d",&m);
       for(i=0;i<m;i++) q.push(i+1);//初始化隊列
       while(!q.empty())//當隊列非空
       {
          printf("%d ",q.front());//打印隊首元素
          q.pop();//拋棄隊首元素
          q.push(q.front());//把隊首元素加入隊尾
          q.pop();//拋棄隊首元素
       }
       printf("\n");
    }
    return 0;
}


 

最後更新:2017-04-03 12:55:39

  上一篇:go OLE DB provider &quot;SQLNCLI11&quot; for linked server &quot;dbLink01&quot; was unable to begin a distributed t
  下一篇:go Oracle Partition 分區詳細總結