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;
}
分析:利用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;
}
相关文章推荐
- POJ 1002 487-3279(map映照容器的使用)
- 【String+Map版】从poj 1002——487-3279的STL做法和若干陷阱来分析MAP
- POJ 1002 487-3279(Map)
- POJ 1002 487-3279(map)
- poj 1002 487-3279 map的使用
- poj 1002(487-3279)STL中的map
- POJ-1002 487-3279(map)
- POJ 1002 487-3279(map应用)
- POJ 1002 487-3279 MAP||Sort
- poj 1002 487-3279(使用STL map)
- POJ1002 487-3279(map映射)
- poj 1002 487-3279之map解法
- POJ 1002 487-3279
- poj 1002 487-3279 // hoj 1347 487-3279
- POJ 1002 487-3279
- POJ1002 487-3279
- POJ 1002 487-3279 G++
- POJ 1002 487-3279 水
- POJ 1002 487-3279
- 快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0