CSP-J 2024-T1扑克牌

方法一:使用二维字符数组存储,利用字符串函数比较去重

#include<bits/stdc++.h>
using namespace std;
int n;
char a[62][3]; //注意此处第二维数组需要开3否则会出现未知错误 
int cnt;//用于统计去重后的个数 
int main()
{
	//cout<<strcmp("dd", "dd")<<" "<<strcmp("da", "dd")<<" "<<strcmp("dd", "da");
	cin>>n;
	for(int i=1; i<=n; i++){
		char t[3]; 
		cin>>t;
		bool b=0;//假定之前的扑克牌中没有相同的 
		for(int j=0; j<cnt; j++){//和之前的扑克牌一一比较 
//			cout<<a[j]<<endl;//测试代码 
			if(strcmp(a[j], t)==0){//字符串比较函数 
				b=1;break;
			} 
		}	
		if(!b){
			strcpy(a[cnt], t);//将字符串t复制给a[cnt] 
			cnt++;
		}	
	} 
	cout<<52-cnt;
	

	return 0;
}

方法二:使用C++中的string, 思路和方法一一致,区分两种写法

#include<bits/stdc++.h>
using namespace std;
int n;
string s[62];
int cnt;//用于统计去重后的个数
int main()
{
	cin>>n;
	for(int i=1; i<=n; i++){
		string t;
		cin>>t;
		bool b=0;//假定之前的扑克牌中没有相同的 
		for(int j=0; j<cnt; j++){//和之前的扑克牌一一比较
			if(s[j]==t){//string比较 
				b=1;break;
			} 
		}
		if(!b){
			s[cnt]=t;//将字符串t赋值给a[cnt] 
			cnt++;
		}	
	}
	cout<<52-cnt;
	return 0;
}

方法三:对每张牌的 2 个字符ASSCII码重新编码成不一样的数字,如SA编码成4*100+1,使用哈希去重即可

#include<bits/stdc++.h>
using namespace std;
int n;
char c[3];
bool a[500];//用于标记每张牌是否出现 
int cnt;
int f1(char ch){
	if(ch=='D')return 1;
	if(ch=='C')return 2;
	if(ch=='H')return 3;
	if(ch=='S')return 4;
}
int f2(char ch){
	if(ch=='A')return 1;
	if(ch=='2')return 2;
	if(ch=='3')return 3;
	if(ch=='4')return 4;
	if(ch=='5')return 5;
	if(ch=='6')return 6;
	if(ch=='7')return 7;
	if(ch=='8')return 8;
	if(ch=='9')return 9;
	if(ch=='T')return 10;
	if(ch=='J')return 11;
	if(ch=='Q')return 12;
	if(ch=='K')return 13;
}
int main()
{
	cin>>n;
	for(int i=1; i<=n; i++){
		int s=0;
		cin>>c;
		s=f1(c[0])*100+f2(c[1]);//每张牌的数字编码为花色*100+点数 
		a[s]=1;
	}
	for(int i=101; i<=413; i++)
		if(a[i])
			cnt++;
	cout<<52-cnt;
	return 0;
}

方法四:使用C++中STL中的set

#include<iostream>
#include<set>
using namespace std;
int n;
string s;
set <string> poker;
int main()
{
	cin>>n;
	for(int i=1; i<=n; i++){
		cin>>s;
		poker.insert(s);
	}
	cout<<52-poker.size(); 
	return 0;
}

方法五:源自网络

posted @ 2024-10-29 15:17  TFLSNOI  阅读(111)  评论(1编辑  收藏  举报