首页 > 代码库 > POJ 1002 487-3279
POJ 1002 487-3279
487-3279是一种转化题,按照题目要求将输入转化为规定的格式,再按照某种格式输出。
本题的要求:
将输入的一个字符串按照如下转化规则进行转化,并判断转化后是否有相同的字符串,若有则输出该字符串及出现的次数,如没有则输出No duplicates.
转化规则:
A, B, and C map to 2
D, E, and F map to 3
G, H, and I map to 4
J, K, and L map to 5
M, N, and O map to 6
P, R, and S map to 7
T, U, and V map to 8
W, X, and Y map to 9
Q、Z、-不进行映射
解题思路:
将输入的字符串按要求进行转化后作为map的主键,将出现的次数作为主键的值记录。
解题代码:
1 #include <iostream> 2 #include <map> 3 #include <string> 4 using namespace std; 5 6 string OriginToResult(string origin) 7 { 8 string result=""; 9 int i=0;10 for(i=0;origin[i]!=‘\0‘;i++)11 {12 if(result.length()==3) result+="-";13 if(origin[i]>=‘0‘&&origin[i]<=‘9‘)14 result+=origin[i];15 else if(origin[i]>=‘A‘&&origin[i]<=‘P‘)16 result+=((origin[i]-‘A‘)/3+2+‘0‘);17 else if(origin[i]>=‘R‘&&origin[i]<=‘Y‘)18 result+=((origin[i]-‘A‘-1)/3+2+‘0‘);19 else continue;20 }21 return result;22 }23 24 int main()25 {26 int n;27 string sTmp,rTmp;28 map<string,int> mResult;29 map<string,int>::iterator l_it;30 while(cin>>n)31 {32 for(int k=0;k<n;k++)33 {34 cin>>sTmp;35 rTmp=OriginToResult(sTmp);36 l_it=mResult.find(rTmp);37 if(l_it==mResult.end())38 {39 mResult.insert(pair<string,int>(rTmp,1));40 }41 else42 {43 l_it->second++;44 }45 }46 if((int)mResult.size()==n)47 {48 cout<<"No duplicates."<<endl;49 }50 else51 {52 for(l_it=mResult.begin();l_it!=mResult.end();l_it++)53 {54 if(l_it->second>1)55 {56 cout<<l_it->first<<" "<<l_it->second<<endl;57 }58 }59 }60 mResult.clear();61 }62 return 0;63 }
POJ 1002 487-3279
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。