2024CSP-J 普及组第二轮试题及解析(第一题、扑克牌(poker))

参考程序(桶去重)代码:

#include<bits/stdc++.h>
using namespace std;
string poker[53];
int main()

{

	int n;

	cin >>n;
	
	int num=0;
	
	for(int i=1;i<=n;i++)
	{
		string s;
		cin>>s;
		bool flag=true;
		for(int j=1;j<=52;j++)
		{
			if(poker[j]==s)
			   flag=false;
		}
		if(!flag)
			continue;
		num++;
		poker[num]=s;
				
	}

	cout <<52 - num;

	return 0;
 }

参考程序(桶去重)文件输入参考程序:

#include<bits/stdc++.h>
using namespace std;
string poker[53];  //建立放牌的string 型数组 
int main()

{
    //打开输入文件,输出文件
	freopen("poker.in","r",stdin);
	freopen("poker.out","w",stdout);
	
	int n;
	cin >>n;      //抓牌的数量 
	int num=0;    //不重复牌的数量 
	for(int i=1;i<=n;i++)  
	{
		string s;
		cin>>s;   //抓牌 
		bool flag=true;   //判断是否重复的bool标志变量 
		for(int j=1;j<=52;j++)  
		{
			if(poker[j]==s) //看下是不是重复的牌 
			   flag=false;   
		}
		if(!flag)
			continue;     //是重复的就丢掉 
		num++;   // 不是重复的,是一张新牌 
		poker[num]=s;  //放到 数组 poker[ ]里 
				
	}
	cout <<52 - num;  //输出答案 
	//关闭输入文件输出文件
	fclose(stdin);
	fclose(stdout);

	return 0;
 }

函数排序、去重参考程序代码:

#include<bits/stdc++.h>
using namespace std;
vector<string>s;
int main()

{

	int n;

	cin >>n;

	s.resize(n);

	for(int i=0;i<n;i++)

	cin >>s[i];

	sort(s.begin(),s.end());

	s.erase(unique(s.begin(),s.end()),s.end());

	cout <<52 -s.size();

	return 0;
 }

函数排序、去重(文件输入)参考程序代码:

#include<bits/stdc++.h>
using namespace std;
vector<string>s;
int main()

{
	//打开输入文件,输出文件
    freopen("poker.in","r",stdin);
	freopen("poker.out","w",stdout);
	
	int n;        //扑克牌的数量 

	cin >>n;    

	s.resize(n);  //动态数组数量为 n

	for(int i=0;i<n;i++)  

	cin >>s[i];   //所有扑克牌都存下来 

	sort(s.begin(),s.end()); //将扑克牌排序 

	s.erase(unique(s.begin(),s.end()),s.end());//将扑克牌去重
	      /*使用unique函数去除排序后的s中的重复元素。
		    unique函数将重复的元素移到容器的末尾,
			并返回一个迭代器指向最后一个不重复元素之后的位置。
			然后,使用erase函数删除这些重复的元素。*/ 

	cout <<52 -s.size();
 
    //关闭输入文件输出文件
	fclose(stdin);
	fclose(stdout);
	
	return 0;
 }

使用set去重参考程序代码:

#include <iostream>  
#include <set>  
#include <fstream>  
  
using namespace std;  
  
int main() {  
    
  
    int n;  
    cin >> n;  // 抓牌的数量  
    set<string> uniqueCards;  // 使用 set 存储不重复的牌  
  
    for (int i = 0; i < n; i++) {  
        string s;  
        cin >> s;  // 抓牌  
        uniqueCards.insert(s);  // 插入到 set 中,自动处理重复  
    }  
  
    // 输出剩余未抓到的牌的数量  
    cout << (52 - uniqueCards.size()) << endl;  
  
 
  
    return 0;  
}

猜你喜欢

转载自blog.csdn.net/weixin_60445850/article/details/143261373