POJ 1002 487-3279(map应用)

来源:互联网 发布:淘宝液晶显示器 编辑:程序博客网 时间:2024/06/06 20:48

用map+string写的,减少代码量

本题有几个坑:

1.输入字符串至少要开到50

2.要考虑电话号码中有0的情况,比如000-0000


map插入后会自动按字典序排序。

迭代器定义方法:

map<string,int>::iterator p;


代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;#include <algorithm>#include <map>#include <string>map<string,int> Num;string Hash(char c){if(c=='A'||c=='B'||c=='C') return "2";if(c=='D'||c=='E'||c=='F') return "3";if(c=='G'||c=='H'||c=='I') return "4";if(c=='J'||c=='K'||c=='L') return "5";if(c=='M'||c=='N'||c=='O') return "6";if(c=='P'||c=='R'||c=='S') return "7";if(c=='T'||c=='U'||c=='V') return "8";if(c=='W'||c=='X'||c=='Y') return "9";}int main(){int N;scanf("%d",&N);for(int i=0;i<N;i++){char s[60];scanf("%s",s);int len=strlen(s);string num="";for(int i=0;i<len;i++){if(s[i]=='-') continue;if(isdigit(s[i])){num+=s[i];}else num+=Hash(s[i]);}Num[num]++;}map<string,int>::iterator p;bool flag=0;for(p=Num.begin();p!=Num.end();p++){string n=(*p).first;if(Num[n]<=1) continue;flag = 1;for(int i=0;i<3;i++){cout<<n[i];}printf("-");for(int i=3;i<7;i++) cout<<n[i];printf(" %d\n",Num[n]);}if(!flag) printf("No duplicates.");return 0;}


0 0
原创粉丝点击