目录
显示
题目链接
http://poj.org/problem?id=1002
大意
有一个字母对应数字的 list,通过对这些电话号码的处理(字母转换成数字,将电话号码转换成 xxx-xxxx 的形式),按电话号码升序输出重复的电话号码以及出现的次数。如果没有重复,就输出 “No duplicates.”。
题解
字母转换成数字,去掉多余的空格,把电话号码转换成数字(这里判重用了一个桶)。
#include <stdio.h> #include <string.h> char s[205]; const int ctoi[]={0,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}; int used[10000005]; void calc()//号码转换成数字 { int num=0,l=strlen(s); for(int i=0;i<l;i++) if(s[i]=='-')continue; else if(s[i]>='0'&&s[i]<='9')num=num*10+s[i]-'0'; else num=num*10+ctoi[s[i]>='a'&&s[i]<='z'?s[i]-'a'+1:s[i]-'A'+1]; used[num]++;//用桶来判重 return; } int main() { int n,flag=0; scanf("%d",&n); for(int i=1;i<=n;i++) { memset(s,0,sizeof(s)); scanf("%s",s); calc(); } for(int i=0;i<=9999999;i++) if(used[i]>=2) { int num_4=i%10000,num_3=i/10000; printf("%03d-%04d %d\n",num_3,num_4,used[i]);//转换成电话号码格式 flag=1; } if(!flag)printf("No duplicates."); return 0; }