简单的模拟题,练手不错~
题目大意:
给一些字符串代表一些号码,有一个字母和数字的映射,没Q和Z字母.字符串格式不定,要求输出最后都转化成标准个格式以后重复的有哪些,并输出重复次数.
源代码:
#include <myhead>
const int N=100011;
const int a[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0};
int n;
void rec(string &name) {
string tname;
for(int i=0;i<name.size();++i) {
if(name[i]>='0'&&name[i]<='9') {
tname.push_back(name[i]);
continue;
}
if(name[i]>='A'&&name[i]<='Z') {
tname.push_back(a[name[i]-'A']+'0');
continue;
}
}
name=tname;
}
void work() {
string name;
map<string,int> ma;
for(int i=0;i<n;++i) {
cin>>name;
rec(name);
ma[name]++;
}
map<string,int>::iterator iter=ma.begin();
int t,flag=0;
string st;
for(;iter!=ma.end();++iter) {
st=iter->first;
t=iter->second;
if(t<2) continue;
flag++;
cout<<st[0]<<st[1]<<st[2]<<"-";
for(int i=3;i<st.size();++i) {
cout<<st[i];
}
cout<<" "<<t<<endl;
}
if(!flag) cout<<"No duplicates."<<endl;
}
int main() {
while(~scanf("%d",&n)) {
work();
}
return 0;
}