P11227[CSP-J 2024] T1 扑克牌
P11227 [CSP-J 2024] 扑克牌
T1
题目
输入 #1复制
1
SA
输出 #1复制
51
输入 #2复制
4
DQ
H3
DQ
DT
输出 #2复制
49
题意
一共52张牌,求出没有输出的牌数
思路
- 方法一: 由于需要去重,简单普通的做法就是直接将四个花色的数据分别放四个数组中,数据比较小,直接遍历即可。
- **方法二:**可以设置一个字符串数组,暴力去重即可
- **方法三:**简易版:利用set直接去重,直接求出其长度
参考代码一
//放到四个数组 四种类型的扑克,然后循环暴力去重
#include<bits/stdc++.h>
using namespace std;
char t1[15] ,t2[15] ,t3[15] ,t4[15] ;//C D H S
int len1,len2,len3,len4;
int main()
{// freopen("poker.in","r",stdin);// freopen("poker.ans","w",stdout);int n,num=0;char a,b;cin>>n;bool f = 0;//默认没有重复的 for(int i=0;i<n;i++){
// cout<<num<<'.'<<endl;cin>>a>>b;f=0;//初始化 switch(a){case 'C':for(int i=0;i<len1;i++){if (t1[i]==b ){f = 1;break;}}if(!f){t1[len1++] = b;//没有重复则赋值且记录num++; }break;case 'D':for(int i=0;i<len2;i++){if (t2[i]==b ){f = 1;break;}}if(!f){t2[len2++] = b;//没有重复则赋值且记录num++; }break;case 'H':for(int i=0;i<len3;i++){if (t3[i]==b ){f = 1;break;}}if(!f){t3[len3++] = b;//没有重复则赋值且记录num++; }break;case 'S':for(int i=0;i<len4;i++){if (t4[i]==b ){f = 1;break;}}if(!f){t4[len4++] = b;//没有重复则赋值且记录num++; }break;}}cout<<52-num; return 0;
}
参考代码二
//直接放到一维数组里面。如果数值相同则去重即可。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[60];
string s[100];
int ans=52;
int main()
{
// freopen("poker.in","r",stdin);
// freopen("poker.ans","w",stdout);cin>>n;for(int i=1;i<=n;++i){cin>>s[i];bool f=true;for(int j=1;j<i;++j){if(s[i]==s[j]){f=false;}}if(f==true){ans--;}}cout<<ans;return 0;
}
参考代码三
#include<bits/stdc++.h>
using namespace std;
int n;
set <string> s;
int ans=52;
int main()
{
// freopen("poker.in","r",stdin);
// freopen("poker.ans","w",stdout);cin>>n;string st;for(int i=1;i<=n;++i){cin>>st;s.insert(st);}ans = ans - s.size();cout<<ans;return 0;
}