您的位置:首页 > 其它

poj 1002 487-3279(map)

2017-12-30 20:37 344 查看
题意: 输入一组电话号码,有的用数字表示,有的用字母表示,有的既有数字也有大写字母,有的有“-”。那么我们的工作就是利用你的火眼金睛,找出每个电话号码出现的次数,并对出现次数超过1次的电话号码,以字典升序的方式输出。 例如310-1010,总共出现了两次3-10-10-10-10和F10101010。

分析:利用c++的map,map插入时已经按索引(key)排好序了。

代码:

#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
char str[] = {"22233344455566677778889999"};

int main(){
int n;
map<string,int> mp;
cin>>n;
while(n--){
string s,ss;
cin>>s;
int ct=0;
for(int i=0;i<s.size();i++){
if('0'<=s[i]&&s[i]<='9') ss.push_back(s[i]);
else if('A'<=s[i]&&s[i]<='Z') ss.push_back(str[s[i]-'A']);
}
ss.insert(3,1,'-');
mp[ss]++;
}
int flag=0;
for(map<string,int>::iterator it=mp.begin(); it!=mp.end(); it++){
if(it->second>1) {
flag=1;
cout<<it->first<<" "<<it->second<<endl;
}
}
if(!flag) cout<<"No duplicates."<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: