ACM 487-3279 怎么老是答案不对呢C/C++ code#includestdio.h#includectype.h#includestring.h#inclu
ACM 487-3279 怎么老是答案不对呢
- C/C++ code
#include<stdio.h>#include<ctype.h>#include<string.h>#include<stdlib.h>char number[100000][20];char map[30]= "22233344455566677778889999";char str[30];void ConvertToStandNum(int k)//把str转化为标准号码,存入第k行{ int i,j,len; len=strlen(str); for(i=0,j=0; i<len; i++) //每个电话号8个字符 { if(isdigit(str[i])) { number[k][j]=str[i]; j++; } else if(isupper(str[i])) { number[k][j]=map[str[i]-'A']; j++; } else if(str[i]=='-') continue; } for(i=20; i>=3; i--) //添加'-' { number[k][i+1]=number[k][i]; } number[k][3]='-';}int compare(const void *a,const void *b){ return strcmp((char *)a,(char*)b);}int main(){ char string[30]; int n,i,counter;//n个电话号 bool boo=false; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%s",str); ConvertToStandNum(i);//把str转化为标准号码,存入第i行 } qsort(number,n,sizeof(number[0]),compare);//排序 counter=0;//重复电话号码计数 int k=0; for(i=0; i<n; i++) { strcpy(string,number[k]); if(!strcmp(number[i],string))//跟前一个一样 则计数 counter++; else if(counter>=2)//不一样则输出重复的号码和重复的次数 { printf("%s %d\n",string,counter); k=i+1; //暂存第k(i+1)个号码 counter=0; boo=true; } else //跟前一个号码不一样且没有重复 { k=i+1; counter=0; } } if(!boo) printf("No duplicates.\n"); return 0;}[解决办法]
请用以下例子调试:
2
4873279
4873279
