UVA755

题目的意思就是给了一堆电话号码,其中英文都有对应的数字要转化。。然后找出重复的号码有哪些,重复了几次。。。

注意如果不足七位,要用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;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值