1002 方便记忆的电话号码
Posted sweet-ginger-candy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1002 方便记忆的电话号码相关的知识,希望对你有一定的参考价值。
思路:
1.提取英文字母,将其转换成数字。因为‘-’所在位置不同则在最初转化阶段不用管它,后面统一将‘-’删除再插入位置4。
2.采用set列表,存储12个字符串,用count()统计出相同字符串的个数,最后用指针i指定各个不同的字符串。x为一个vector容器,用来进行字母转换数字以及调整电话号码格式。
3.运用队列语法规则。erase()删除集合中元素。lower_bound()返回大于或等于某值的第一个元素的迭代器。upper_bound()返回大于某个值元素的迭代器。
4.x.size()没有符号,为保持前后符号一致需要设置unsigned int i;
5.remove(v.begin(),v.end(),‘-‘);删除v中所有为‘-’的元素。
6.设置maxcount==0目的为确认没有重复字符串。
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<algorithm> 5 #include<cmath> 6 #include<set> 7 using namespace std; 8 int main(){ 9 int n; 10 cin>>n; 11 multiset<string>p; 12 while(n--){ 13 string x; 14 cin>>x; 15 for(unsigned int i=0;i<x.size();i++){ 16 switch(x.at(i)) 17 { 18 case‘A‘: 19 case‘B‘: 20 case‘C‘: 21 {x.at(i)=‘2‘; 22 break;} 23 case‘D‘: 24 case‘E‘: 25 case‘F‘: 26 {x.at(i)=‘3‘; 27 break;} 28 case‘G‘: 29 case‘H‘: 30 case‘I‘: 31 {x.at(i)=‘4‘; 32 break; 33 } 34 case‘J‘: 35 case‘K‘: 36 case‘L‘: 37 {x.at(i)=‘5‘; 38 break; 39 } 40 case‘M‘: 41 case‘N‘: 42 case‘O‘: 43 {x.at(i)=‘6‘; 44 break; 45 } 46 case‘P‘: 47 case‘R‘: 48 case‘S‘: 49 {x.at(i)=‘7‘; 50 break; 51 } 52 case‘T‘: 53 case‘U‘: 54 case‘V‘: 55 {x.at(i)=‘8‘; 56 break; 57 } 58 case‘W‘: 59 case‘X‘: 60 case‘Y‘: 61 {x.at(i)=‘9‘; 62 break; 63 } 64 } 65 } 66 x.erase(remove(x.begin(),x.end(),‘-‘),x.end()); 67 x.insert(3,"-"); 68 p.insert(x); 69 } 70 auto i=p.begin(); 71 int maxcount=0,count=1; 72 while(i!=p.end()){ 73 count=p.count(*i); 74 if(count>1){ 75 maxcount=count; 76 cout<<*i<<" "<<count<<endl; 77 } 78 i=p.upper_bound(*i); 79 } 80 if(maxcount==0) 81 cout<<"No,duplicates."<<endl; 82 return 0; 83 }
结果正确但是无法通过测评系统。
以上是关于1002 方便记忆的电话号码的主要内容,如果未能解决你的问题,请参考以下文章