题意:按照题中指定的字母对数字的转换表,从一组表示电话号码的字符串中找到重复出的号码,按升序输出号码以及它重复出现的次数。
思路:按照字母与数字的对应关系将字符串转化为整数,保存进数组,用快速排序将数组排序,最后对数组遍历一次,找出重复出现的数字,按格式输出。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int main()
{
int cmp(const void *, const void *);
int t;
scanf("%d",&t);
int a[200000];
int b[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0};
memset(a,0,200000);
for(int i=0;i<t;i++)
{
char c[55];
scanf("%s",c);
int length = strlen(c);
for(int j=0;j<length;j++)
if(isdigit(c[j]))
a[i]=a[i]*10+c[j]-'0';
else if(isalpha(c[j]))
a[i]=a[i]*10+b[c[j]-'A'];
}
qsort(a,t,sizeof(int),cmp);
int j;
int i=0;
int flag=0;
while (i<t-1)
{
j=i;
while (a[i]==a[i+1]) i++;
if (i!=j)
{
printf("%3d-%4d %d\n",a[i]/10000,a[i]%10000,i-j+1);
flag=1;
}
i++;
}
if (flag==0) printf("No duplicates.\n");
system("pause");
return 0;
}
int cmp(const void * a,const void * b)
{
return *(int *)a - *(int *)b;
}