模拟即可 变量解释 string t;//输入时用int a[105];//输入时用int tot;//输入时用queue<int> v[4];//v[0]表示溪染的牌 v[1]表示叁秋的牌string cname[3]={"xiran","sanqiu"};//输出时用string pai[24]={"","A","2","3","4","5","6","7","8","9","10","J","Q","K"};//输出时用stack<int> q;//桌面上的牌bool flag[21];//判断编号为i的牌是否出现在桌面上参考代码 #include<bits/stdc++.h>using namespace std;string t;int a[105];int tot;queue<int> v[4];string cname[3]={"xiran","sanqiu"};string pai[24]={"","A","2","3","4","5","6","7","8","9","10","J","Q","K"};stack<int> q;bool flag[21];void get(int k,int x)//从桌面上获得牌{    int all=2;    while(q.size()&&all){        v[x].push(q.top());        flag[q.top()]=0;//取消标记        if(q.top()==k)            all--;        q.pop();    }}void work(int x){    int k=v[x].front();    v[x].pop();    q.push(k);    if(k==11){        if(q.size()==1)            return; //触发空钩        else{            get(0,x);//拿走桌面上全部的牌            work(x);//再出一张牌        }    }    else{        if(flag[k]){//如果这种牌在桌面上出现过            get(k,x);//拿走牌            work(x);//再出一张牌        }        else            flag[k]=1;//标记    }}int main(){    cin>>t;    for(int i=0;i<=t.size();i++){        if(t[i]=='A') a[++tot]=1;        else if(t[i]>='2'&&t[i]<='9') a[++tot]=t[i]-'0';        else if(t[i]=='1') {a[++tot]=10;i++;}        else if(t[i]=='J') a[++tot]=11;        else if(t[i]=='Q') a[++tot]=12;        else if(t[i]=='K') a[++tot]=13;    }//输入处理    for(int i=1;i<=tot;i++) v[i&1].push(a[i]);//轮流取牌    int win=0;//胜利者    while(1){        work(1);        if(v[1].size()==0) {win=0;break;}//判断游戏是否结束         work(0);        if(v[0].size()==0) {win=1;break;}//判断游戏是否结束     }        //输出    cout<<cname[win]<<"\n";    while(v[win].size()){        cout<<pai[v[win].front()]<<" ";        v[win].pop();    }    return 0;}
点赞 0
评论 0
全部评论

相关推荐

牛客34884196...:你期望薪资4-5k,那确实可以重生了,但很难在深圳活下去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务