題目連結: 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';
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay