算法訓練-卡片遊戲
Description
桌上有一疊牌,從第一張牌(即位於頂麵的牌)開始從上往下依次編號為1~n。當至少還剩兩張牌時進行以下操作:把第一張牌扔掉,然後把新
的第一張放到整疊牌的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌。
Input
第一行為一個整數t(0<t<40),表示測試用例個數。以下t行每行包含一個整數n(0<n<40),為一個測試用例的牌數。
Output
為每個測試用例單獨輸出一行,該行中依次輸出每次扔掉的牌以及最後剩下的牌,每張牌後跟著一個空格。
Sample Input
2
7
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