487-3279



思路:看到这个题,我们可以把它分成两个部分,第一个部分是将数据变为电话号码,第二部分是找出出现次数大于1的电话号码,并且输出。其实,分为两个部分后就不难了,第一部分通过一个函数进行转化,第二部分,利用map容器进行统计。
代码:
#include<iostream>
#include<map>
using namespace std;
char str[1001];
int sum = 0;
int fun(){
int i, k = 0;
sum = 0;
for (i = 0; k < 7; i++){
if (str[i] >= '0'&&str[i] <= '9'){
sum = sum * 10 + str[i] - '0';
k++;
}
if (str[i] >= 'A'&&str[i] <= 'Z'){
sum = sum * 10 + ((str[i] - 'A' - (str[i]>'Q')) / 3 + 2);
k++;
}
}
return sum;
}
int main(){
map<int, int>m;
int n;
cin >> n;
getchar();
for (int i = 0; i < n; i++){
gets(str);
m[fun()]++;
}
bool flag = false;
map<int, int>::iterator it;
for (it = m.begin(); it != m.end(); it++){
if (it->second>1){
printf("%03d-%04d %d\n", it->first / 10000, it->first % 10000, it->second);
flag = true;
}
}
if (!flag){
printf("No duplicates.\n");
}
system("pause");
return 0;
}
来源:https://www.cnblogs.com/pcdl/p/12416988.html