69,372
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <malloc.h>
struct Tree
{
long num;
long count;
Tree *lchild;
Tree *rchild;
};
long n,i;
int flag=0;
char code[20];
Tree *Root=NULL;
long Change(char code[20]);
void Search_Insert(Tree **Root,long n);
void Middle_Search(Tree *Root);
int main()
{
scanf("%ld",&n);
for (i=1;i<=n;i++)
{
scanf("%s",code);
Search_Insert(&Root,Change(code));
}
Middle_Search(Root);
if (flag==0) printf("No duplicates.\n");
return 0;
}
long Change(char code[20])
{
int j=0;
long number=0;
while (code[j]!='\0')
{
if (code[j]<='Z'&&code[j]>='A')
switch (code[j])
{
case 'A':
case 'B':
case 'C':
number=number*10+2;
break;
case 'D':
case 'E':
case 'F':
number=number*10+3;
break;
case 'G':
case 'H':
case 'I':
number=number*10+4;
break;
case 'J':
case 'K':
case 'L':
number=number*10+5;
break;
case 'M':
case 'N':
case 'O':
number=number*10+6;
break;
case 'P':
case 'R':
case 'S':
number=number*10+7;
break;
case 'T':
case 'U':
case 'V':
number=number*10+8;
break;
case 'W':
case 'X':
case 'Y':
number=number*10+9;
break;
}
if (code[j]<='9'&&code[j]>='0')
number=number*10+code[j]-'0';
j++;
}
return number;
}
void Search_Insert(Tree **Root,long n)
{
if ((*Root)==NULL)
{
(*Root)=(Tree *)malloc(sizeof(Tree));
(*Root)->num=n;
(*Root)->count=1;
(*Root)->lchild=NULL;
(*Root)->rchild=NULL;
}
else
{
if (n<(*Root)->num) Search_Insert(&(*Root)->lchild,n);
if (n==(*Root)->num) (*Root)->count++;
if (n>(*Root)->num) Search_Insert(&(*Root)->rchild,n);
}
}
void Middle_Search(Tree *Root)
{
if (Root!=NULL)
{
Middle_Search(Root->lchild);
if (Root->count>1)
{ flag=1; printf("%.3d-%.4d %d\n",Root->num/10000,Root->num%10000,Root->count);}
Middle_Search(Root->rchild);
}
}