这题意思很简单,就是找出相同的电话号码,统计其重复数组,并按字典序输出,如果没有重复,就输出No duplicates. 容易出现问题的地方就是输出时候的控制。
以下是代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int T; char str[100010][10]; int cmp(void const *a,void const *b) { char *pa=(char *)a; char *pb=(char *)b; return strcmp(pa,pb); } int main() { int i,j,k; char ch; scanf("%d",&T); getchar(); for(i=0;i<T;i++) { j=0; while((ch=getchar())!='\n') { if(isdigit(ch)) str[i][j++]=ch; else if(isupper(ch)) { switch(ch) { case 'A':case 'B':case 'C':str[i][j++]='2';break; case 'D':case 'E':case 'F':str[i][j++]='3';break; case 'G':case 'H':case 'I':str[i][j++]='4';break; case 'J':case 'K':case 'L':str[i][j++]='5';break; case 'M':case 'N':case 'O':str[i][j++]='6';break; case 'P':case 'R':case 'S':str[i][j++]='7';break; case 'T':case 'U':case 'V':str[i][j++]='8';break; case 'W':case 'X':case 'Y':str[i][j++]='9';break; } } if(j==3) str[i][j++]='-'; } str[i][j]='\0'; } qsort(str,T,sizeof(char)*10,cmp); k=0; for(i=0;i<T;i++) { if(i<T-1&&strcmp(str[i],str[i+1])!=0) continue; else if(i==T-1) continue; else { k=1; j=1; while(strcmp(str[i],str[i+1])==0) j++,i++; printf("%s %d\n",str[i],j); i-=1; } } if(k==0) printf("No duplicates.\n"); return 0; }