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             caseA:
19             caseB:
20             caseC:
21                 {x.at(i)=2;
22                 break;}
23             caseD:
24             caseE:
25             caseF:
26                 {x.at(i)=3;
27                 break;}
28             caseG:
29             caseH:
30             caseI:
31                 {x.at(i)=4;
32                 break;
33                 }
34             caseJ:
35             caseK:
36             caseL:
37                 {x.at(i)=5;
38                 break;
39                 }
40             caseM:
41             caseN:
42             caseO:
43                 {x.at(i)=6;
44                 break;
45                 }
46             caseP:
47             caseR:
48             caseS:
49                 {x.at(i)=7;
50                 break;
51                 }
52             caseT:
53             caseU:
54             caseV:
55                 {x.at(i)=8;
56                 break;
57                 }
58             caseW:
59             caseX:
60             caseY:
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 方便记忆的电话号码的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1002 487-3279

1002 重复电话号码

POJ 1002 487-3279

POJ1002电话号码累计

487-3279[POJ1002]

android小知识点代码片段