uva10935卡片遊戲

蘇慕陽發表於2020-12-13

1.n張牌(編號1-n),剩下的牌>=2時,從牌1開始,扔頂上一張,再把新的頂牌放到最後。
輸出扔掉的所有牌和最後剩下的那一張牌。
2.程式碼
程式碼的原文連結:https://www.luogu.com.cn/blog/jyfnzb0315/solution-uva10935

#include<cstdio>
#include<string>
#include<iostream>
#include<queue>
using namespace std;
int main(){
    string d,r;
    d="Discarded cards";//棄牌 
    r="Remaining card";//還剩多少牌 
    int num;//表示第幾個數 
    int fact=1;
    while(cin>>num&&num!=0){//多組資料輸入,步驟1完成 
        queue<int> q;//由於佇列沒有清空的方法,得這樣才能做到清空 
        for(int i=1;i<=num;++i){
            q.push(i);//把i元素放到隊尾 
        }
        cout<<d<<": ";//先輸出"Discarded cards:" 
        bool flag=1;//flag標記陣列 
        while(q.size()>=2){
            int put=q.front();//put記錄每一次的隊首元素 
            if(flag==1){//標記為1,按題意輸出隊首 
                cout<<put;
                flag=0;//標記為0 
            }
            else{//否則
                cout<<", "<<put;//打個逗號 ,再輸出隊首 
            }
            q.pop();//按題意,先彈出隊首 
            q.push(q.front());//也可以:q.push(put)); 
            q.pop();//再彈出 
            //步驟2完成了
        }
        cout<<endl;//轉行 
        cout<<r<<": "<<q.front()<<endl;//輸出並轉行 
    }
    return 0;
}

相關文章