首页 > 代码库 > 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