P11227 [CSP-J 2024] 扑克牌 题解
StarsTwinkle · · 题解
观前提示:此种代码在竞赛中耗费时间较长,不建议尝试,
但我还是用这个拿到分的,因为别的都不会啊。
P11227 [CSP-J 2024] 扑克牌 Solution
Step 1:审题
每张牌具有两个属性:花色和点数。花色共有
4 种:方片、草花、红桃和黑桃。点数共有13 种,从小到大分别为\tt{A 2 3 4 5 6 7 8 9 T J Q K} 。注意:点数10 在本题中记为\tt T 。
注意:点数
所以,我们不能方便地使用下标来判断,寻找新的方式。
Step 2:构思
但是我非要叛逆 其实是这个蒟蒻不会别的了,有没有什么办法呢,有!
首先,我们维护一个二维数组,
Step 3:形成代码
首先,我们需要录入每一张牌,并且告诉数组:这牌有了,注意:这里我用的是bool类型的二维数组,这样就不用去重了。
int n;
cin>>n;
for(int i=1;i<=n;i++){
char hua,num;
cin>>hua>>num;
//判断红桃
if(hua=='H'){
if(num=='A'){
p[1][1]=1;
}
if(num=='2'){
p[1][2]=1;
}
if(num=='3'){
p[1][3]=1;
}
if(num=='4'){
p[1][4]=1;
}
if(num=='5'){
p[1][5]=1;
}
if(num=='6'){
p[1][6]=1;
}
if(num=='7'){
p[1][7]=1;
}
if(num=='8'){
p[1][8]=1;
}
if(num=='9'){
p[1][9]=1;
}
if(num=='T'){
p[1][10]=1;
}
if(num=='J'){
p[1][11]=1;
}
if(num=='Q'){
p[1][12]=1;
}
if(num=='K'){
p[1][13]=1;
}
}
//判断黑桃
if(hua=='S'){
if(num=='A'){
p[2][1]=1;
}
if(num=='2'){
p[2][2]=1;
}
if(num=='3'){
p[2][3]=1;
}
if(num=='4'){
p[2][4]=1;
}
if(num=='5'){
p[2][5]=1;
}
if(num=='6'){
p[2][6]=1;
}
if(num=='7'){
p[2][7]=1;
}
if(num=='8'){
p[2][8]=1;
}
if(num=='9'){
p[2][9]=1;
}
if(num=='T'){
p[2][10]=1;
}
if(num=='J'){
p[2][11]=1;
}
if(num=='Q'){
p[2][12]=1;
}
if(num=='K'){
p[2][13]=1;
}
}
//判断方片
if(hua=='D'){
if(num=='A'){
p[3][1]=1;
}
if(num=='2'){
p[3][2]=1;
}
if(num=='3'){
p[3][3]=1;
}
if(num=='4'){
p[3][4]=1;
}
if(num=='5'){
p[3][5]=1;
}
if(num=='6'){
p[3][6]=1;
}
if(num=='7'){
p[3][7]=1;
}
if(num=='8'){
p[3][8]=1;
}
if(num=='9'){
p[3][9]=1;
}
if(num=='T'){
p[3][10]=1;
}
if(num=='J'){
p[3][11]=1;
}
if(num=='Q'){
p[3][12]=1;
}
if(num=='K'){
p[3][13]=1;
}
}
//判断草花
if(hua=='C'){
if(num=='A'){
p[4][1]=1;
}
if(num=='2'){
p[4][2]=1;
}
if(num=='3'){
p[4][3]=1;
}
if(num=='4'){
p[4][4]=1;
}
if(num=='5'){
p[4][5]=1;
}
if(num=='6'){
p[4][6]=1;
}
if(num=='7'){
p[4][7]=1;
}
if(num=='8'){
p[4][8]=1;
}
if(num=='9'){
p[4][9]=1;
}
if(num=='T'){
p[4][10]=1;
}
if(num=='J'){
p[4][11]=1;
}
if(num=='Q'){
p[4][12]=1;
}
if(num=='K'){
p[4][13]=1;
}
}
}
最后扫一边数组,看哪些牌有就行了。