NC217389. 金钩钓鱼
描述
扑克牌一共有张牌,分为种花色加上大小王各张。花色分为梅花、方片、红桃、黑桃各张牌,分别为。如果一副新的扑克牌,是有张的,因为多张是空白牌,让别人作切牌用的。
溪染和叁秋为了方便,扔掉了空白牌和大小王
由于叁秋太菜了,溪染决定让叁秋先摸牌
当一个人没有牌时,游戏立即结束
当一个人打出了最后一张牌,但是又得到了几张牌时,不判定此人输
输入描述
一个字符串,表示一个牌堆。如 , 是牌堆最上面的牌。注意扑克牌占两格字符宽度。
输出描述
输出行第一行输出胜利者或(分别对于溪染和叁秋)第二行输出胜利者目前的手牌,用空格隔开
示例1
输入:
5102297A1010562388JQAK869A754537286K444J3KJ9Q91067J3QKQA
输出:
sanqiu 2 2 J Q 8 8 8 A 5 A J Q 7 J 3 4 9 10 9 Q 9 K A Q 10 10 6 5 6 K 4 8 K 7 6 7 3 K 2 4 7 6 3 5 2 10 5
C++ 解法, 执行用时: 6ms, 内存消耗: 376K, 提交时间: 2021-06-10 19:28:44
#include<bits/stdc++.h> using namespace std; #define N 53 #define For(i,x,y)for(i=x;i<=(y);i++) string str; char xiran[N],sanqiu[N],card[N]; int main() { int i,k,p,q,rem; k=p=q=rem=0; cin>>str; For(i,0,str.size()-1) { if(str[i]=='0')continue; if(rem&1)xiran[++p]=str[i]; else sanqiu[++q]=str[i]; rem^=1; } while(p&&q) { if(rem) { card[++k]=xiran[1]; For(i,2,p)xiran[i-1]=xiran[i]; p--; } else { card[++k]=sanqiu[1]; For(i,2,q)sanqiu[i-1]=sanqiu[i]; q--; } if(card[k]=='J')i=1; else For(i,1,k-1) if(card[i]==card[k])break; if(i==k) { rem^=1; continue; } while(k>=i) if(rem)xiran[++p]=card[k--]; else sanqiu[++q]=card[k--]; } puts((p?"xiran":"sanqiu")); For(i,1,p|q) if(p)if(xiran[i]=='1')cout<<"10 "; else cout<<xiran[i]<<' '; else if(sanqiu[i]=='1')cout<<"10 "; else cout<<sanqiu[i]<<' '; return 0; }