題目連結: https://zerojudge.tw/ShowProblem?problemid=e155
# 內容
給你一副照順序放好的紙牌,其中卡片的編號從 1~n,且 1 號排在最上面,n 號牌在最底下。
只要這副牌還有兩張以上,你就必須照以下的規則操作:
丟掉最上面的那張牌,然後把目前最上面的那張牌放到牌堆的最下面。
你的工作是找出每張牌被丟掉的順序,以及最後剩下的那張牌。
# 解題思路
依照題意將 queue 的最上層取出並移除,接著再取最上層推到佇列的最後面。
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
int main(){ | |
int n; | |
while(cin >> n && n ){ | |
queue<int> Q; | |
int card[100]={0},end=0; | |
for(int i=1;i<=n;i++) Q.push(i); | |
cout<<"Discarded cards: "; | |
while(Q.size()>1){ | |
cout<<Q.front(); | |
if(Q.size()!=2)cout<<", "; | |
card[end++]=Q.front(); | |
Q.pop(); | |
Q.push(Q.front()); | |
Q.pop(); | |
} | |
cout<<"\nRemaining card: "<<Q.front()<<'\n'; | |
} | |
} |