参考程序(桶去重)代码:
#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;
}