poj 1002 487-3279
来源:互联网 发布:生风灿烂的日子 知乎 编辑:程序博客网 时间:2024/05/16 12:00
/* ********************Sample Input**12*4873279*ITS-EASY*888-4567*3-10-10-10*888-GLOP*TUT-GLOP*967-11-11*310-GINO*F101010*888-1200*-4-8-7-3-2-7-9-*487-3279**Sample Output**310-1010 2*487-3279 4*888-4567 3**二维数组排序由于不会所以用结构体 **********************/ #include <stdio.h>#include <string.h>#include <stdlib.h>const int MAXN=100010;struct Node { char name[128];//数组开小了wa }num[MAXN];int comp(const void *a,const void *b)//快排 {return strcmp(((Node*)a)->name,((Node*)b)->name);}int Find(int n,int T) {int tmp,i;for (i=n;i<=T-1;i++){tmp=strcmp(num[i].name,num[i+1].name);if(tmp) return i;}}int main(int argc, char *argv[]){int T,e,s,i,j,cas,t,sum,flag;scanf("%d",&T);for (i=0;i<T;i++) scanf("%s",num[i].name);for (i=0;i<T;i++){for (j=0;num[i].name[j];j++){if (num[i].name[j]=='-') {t=j;while(1){num[i].name[t]=num[i].name[t+1];if(num[i].name[t]=='\0') break;t++;} }if(num[i].name[j]=='-') j-=1; else if (num[i].name[j]>='A' && num[i].name[j]<='C') num[i].name[j]='2'; else if (num[i].name[j]>='D' && num[i].name[j]<='F') num[i].name[j]='3'; else if (num[i].name[j]>='G' && num[i].name[j]<='I') num[i].name[j]='4';else if (num[i].name[j]>='J' && num[i].name[j]<='L') num[i].name[j]='5';else if (num[i].name[j]>='M' && num[i].name[j]<='O') num[i].name[j]='6';else if (num[i].name[j]=='P' || num[i].name[j]=='R' || num[i].name[j]=='S') num[i].name[j]='7';else if (num[i].name[j]>='T' && num[i].name[j]<='V') num[i].name[j]='8';else if(num[i].name[j]>='W' && num[i].name[j]<='Y') num[i].name[j]='9';}} qsort(num,T,sizeof(num[0]),comp);s=0;e=0;flag=1;while(e<T-1){ e=Find(s,T);//找i和i+1不一样的时候i的位置 sum=e-s+1; s=e+1; if(sum>1) { flag=0; cas=0; for(cas=0;cas<3;cas++) printf("%c",num[e].name[cas]); printf("-"); for(;cas<7;cas++) printf("%c",num[e].name[cas]); printf(" %d\n",sum); } } if(flag) printf("No duplicates.\n");//这个没写wa return 0;}