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;}

 
原创粉丝点击