题目的意思就是给了一堆电话号码,其中英文都有对应的数字要转化。。然后找出重复的号码有哪些,重复了几次。。。
注意如果不足七位,要用0补位。
在统计之前虽好排下序,可以简单很多,如果相同的都会在一起。
AC代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a[100010];
char s1[1000];
int b[]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
int cmp(const void *a,const void *b) {
return (*(int *)a-*(int *)b);
}
int main() {
int i,j,n,s,l,k,sum,flag,t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
getchar();
flag = 0;
for(i = 0 ; i <= n - 1;i++) {
gets(s1);
l = strlen(s1);
sum = 0;
for(j = 0 ;j <= l - 1;j++) {
if(s1[j] >= '0' && s1[j] <= '9') {
sum = sum * 10 + s1[j] - '0';
}
else if(s1[j]>='A'&&s1[j]<'Z'&&s1[j]!='Q') {
sum=sum*10+b[s1[j]-'A'];
}
}
a[flag]=sum;
flag+=1;
}
qsort(a,flag,sizeof(a[0]),cmp);
k=0;
for(i=0;i<=flag-1;) {
s=1;
for(j=i+1;j<=flag-1;j++) {
if(a[i]==a[j]) {
s+=1;
}
else {
break;
}
}
if(s>1) {
k=1;
printf("%03d-%04d %d\n",a[i]/10000,a[i]%10000,s);
}
i=j;
}
if(k==0) {
printf("No duplicates.\n");
}
if(t){
printf("\n");
}
}
return 0;
}