C++:
#include <bits/stdc++.h>
using namespace std;
int n;
struct node
{
char data[55];
int num;
struct node *lc, *rc;
};
void creat(struct node *&root,char s[])
{
if(root == NULL)
{
root = (struct node *)malloc(sizeof(struct node ));
strcpy(root->data,s);
root -> lc = root -> rc = NULL;
root -> num = 1;
}
else {
int f = strcmp(root->data,s);
if(f > 0)
{
creat(root -> lc,s);
}
else if(f < 0)
{
creat(root -> rc, s);
}
else root -> num ++;
}
}
void fin(struct node *root)
{
if(root)
{
fin(root->lc);
printf("%s %.2lf%c
",root -> data,root -> num *100.0 / n,'%');
fin(root -> rc);
}
}
char s[55];
int main()
{
struct node *root;
root = NULL;
scanf("%d",&n);
getchar();
for(int i = 0; i < n; i ++)
{
gets(s);
for(int j = 0; j < strlen(s); j ++)
{
if(s[j] >= 'A' && s[j] <= 'Z')
{
s[j] = s[j] -'A' + 'a';
}
}
creat(root,s);
}
fin(root);
return 0;
}