小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,

 题目描述:

  小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,他需要一个记牌器,记录其他三家打了哪一些牌,以便其制定策略。

  桥牌使用的是去掉大小王的52张扑克牌,牌共有4个花色,分别是草花、方片、红心、黑桃,每一种花色有13张牌,点数分别是A、2、3、4、5、6、7、8、9、10、J、Q、K。在本题中,我们用字母来表示花色,具体说S是黑桃,H是红心,D是方片,C是草花,同时我们用T表示10点。

  桥牌的打牌阶段比较简单,总共4个玩家,每一个玩家手上有13张牌,每一次从某一家开始(具体从哪一家开始的规定也比较繁琐,本题不展开)顺时针出牌;总共13轮,每一轮每一个玩家只能出一张。小明要做的就是在每一轮结束之后记录已经出过哪一些牌,并且在k轮之后询问所有剩余的牌。本题中所有的牌面表示都是两个字母,第一个字母是点数,第二个字母是花色。

【输入形式】

  输入包括一组数据,第一行是一个整数k(1<=k<=12),表示小明想知道前k轮之后剩余哪一些牌,然后跟着k行,每行四个字符串,分别表示这一轮中四家出的牌,每一个字符串第一个字符表示点数,第二个字符表示花色,例如:9S表示黑桃9,KD表示方块K,TH表示红心10。

【输出形式】

输出经过k轮出牌之后还剩余哪一些牌,每一张牌用两个字符表示,第一个是点数,第二个是花色。输出时首先按照黑桃、红心、方片、草花的顺序输出,花色一样的按照点数大小从小到大输出,其中输出的时候我们认为A、2、3、4、5、6、7、8、9、10、J、Q、K是依次递增的,具体细节见输出样例。

【样例输入】

7

3D 5D 9D AD

4S 5S TS KS

8S 9S 2S AS

6S 8D KD 2D

7C 3C 6C KC

AC TC 2C 5H

8H 3H TH AH

【样例输出】

3S 7S JS QS 2H 4H 6H 7H 9H JH QH KH 4D 6D 7D TD JD QD 4C 5C 8C 9C JC QC

【样例说明】

7轮之后,剩余的牌按顺序输出的结果就是样例输出,可以验证已经出的牌和还剩余的牌加起来是去掉大小王的一副扑克牌。
【评分标准】

对于20%的数据: n=1,且保证四家所出的牌花色相同

对于50%的数据:n=1

对于100%的数据:1<=n<=12,并且保证列出来的牌不重复。

因为本题只是验证记牌器的功能正确,所以数据中出牌记录不保证符合桥牌的出牌规则,如果不理解这句话请忽略,不影响做出正确结果。

时间限制:1s

空间限制:64MB

代码如下:

#include <iostream>
#include <cstring>
using namespace std;

int main(){
	int a[5][14];
	
	for(int i=1;i<=4;i++){
		for(int j=1;j<=13;j++){
			a[i][j]=0;
		}
	}
	
	int n;cin>>n;//第n轮
	
	/*string s;cin>>s;
	int b=s[0]-'0';
	cout<<b<<endl;
	*/
	
	//*
	for(int i=0;i<n;i++){
		for(int j=0;j<4;j++){
			string s;cin>>s;
			int ColorFlag=0;
			char x=s[0];// 牌数  
			char y=s[1];//花色
			//cout<<x<<" "<<y<<endl;
			if(y=='S') ColorFlag=1;
			else if(y=='H') ColorFlag=2;
			else if(y=='D') ColorFlag=3;
			else if(y=='C') ColorFlag=4;
			//cout<<ColorFlag<<endl;
			if(x>='2' && x<='9') {
				int num=x-'0';
				a[ColorFlag][num]=1;
				//cout<<ColorFlag<<" "<<num<<" "<<a[ColorFlag][num]<<" ";
			}
			else if (x=='A')
				a[ColorFlag][1]=1;
			else if (x=='T')
				a[ColorFlag][10]=1;
			else if (x=='J')
				a[ColorFlag][11]=1;
			else if (x=='Q')
				a[ColorFlag][12]=1;				
			else if (x=='K')
				a[ColorFlag][13]=1;
		} 
}

	for(int i=1;i<=4;i++){
		for(int j=1;j<=13;j++){
			if(a[i][j]==0){
			if(j==1) cout<<"A";
			else if(j==10) cout<<"T";
			else if(j==11) cout<<"J";
			else if(j==12) cout<<"Q";
			else if(j==13) cout<<"K";
			else cout<<j;
			
			if(i==1)cout<<"S"<<" ";
			else if(i==2)cout<<"H"<<" ";
			else if(i==3)cout<<"D"<<" ";
			else if(i==4)cout<<"C"<<" ";
			}
		}
	}

	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪&

感谢您的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值