poj1002
电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, 和C 映射到 2
D, E, 和F 映射到 3
G, H, 和I 映射到 4
J, K, 和L 映射到 5
M, N, 和O 映射到 6
P, R, 和S 映射到 7
T, U, 和V 映射到 8
W, X, 和Y 映射到 9
Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。
如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)
你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。
比较简单,直接使用一个1千W的数组去判断即可
#include<stdio.h>
#define maxn 10000000
int a[maxn];
int TurnNum(char s[])
{
int i, n=0;
for(i=0; s[i]; i++)
{
if(s[i] >= '0' && s[i] <= '9')
n = n*10 + s[i] - '0';
else if(s[i]=='A'||s[i]=='B'||s[i]=='C')
n = n*10 + 2;
else if(s[i]=='D'||s[i]=='E'||s[i]=='F')
n = n*10 + 3;
else if(s[i]=='G'||s[i]=='H'||s[i]=='I')
n = n*10 + 4;
else if(s[i]=='J'||s[i]=='K'||s[i]=='L')
n = n*10 + 5;
else if(s[i]=='M'||s[i]=='N'||s[i]=='O')
n = n*10 + 6;
else if(s[i]=='P'||s[i]=='R'||s[i]=='S')
n = n*10 + 7;
else if(s[i]=='T'||s[i]=='U'||s[i]=='V')
n = n*10 + 8;
else if(s[i]=='W'||s[i]=='X'||s[i]=='Y')
n = n*10 + 9;
}
return n;
}
int main()
{
int i, n, k;
char s[1005];
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%s", s);
k = TurnNum(s);
a[k]++;
}
for(k=i=0; i<maxn; i++)
if(a[i] > 1)
{
k = 1;
printf("%03d-%04d %d\n", i/10000, i%10000, a[i]);
}
if(k == 0)
printf("No duplicates.\n");
return 0;
}
int a[maxn];
int TurnNum(char s[])
{
int i, n=0;
for(i=0; s[i]; i++)
{
if(s[i] >= '0' && s[i] <= '9')
n = n*10 + s[i] - '0';
else if(s[i]=='A'||s[i]=='B'||s[i]=='C')
n = n*10 + 2;
else if(s[i]=='D'||s[i]=='E'||s[i]=='F')
n = n*10 + 3;
else if(s[i]=='G'||s[i]=='H'||s[i]=='I')
n = n*10 + 4;
else if(s[i]=='J'||s[i]=='K'||s[i]=='L')
n = n*10 + 5;
else if(s[i]=='M'||s[i]=='N'||s[i]=='O')
n = n*10 + 6;
else if(s[i]=='P'||s[i]=='R'||s[i]=='S')
n = n*10 + 7;
else if(s[i]=='T'||s[i]=='U'||s[i]=='V')
n = n*10 + 8;
else if(s[i]=='W'||s[i]=='X'||s[i]=='Y')
n = n*10 + 9;
}
return n;
}
int main()
{
int i, n, k;
char s[1005];
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%s", s);
k = TurnNum(s);
a[k]++;
}
for(k=i=0; i<maxn; i++)
if(a[i] > 1)
{
k = 1;
printf("%03d-%04d %d\n", i/10000, i%10000, a[i]);
}
if(k == 0)
printf("No duplicates.\n");
return 0;
}