Problem Description
随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。
Input
输入一组测试数据。数据的第1行给出一个正整数N (n <= 100000),N表示树的数量;随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20个字符的字符串,字符串由英文字母和空格组成,不区分大小写。
Output
按字典序输出各种树的种类名称和它占的百分比,中间以空格间隔,小数点后保留两位小数。
Example Input
2 This is an Appletree this is an appletree
Example Output
this is an appletree 100.00%
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ERROR -1
#define OK 1
typedef char Elemtype;
typedef struct BiTnode
{
Elemtype data[30];
int num;
struct BiTnode *lchild, *rchild;
}BiTnode, *BiTree;
BiTree Creat(BiTree &T, Elemtype a[]);
void Inorder(BiTree T);
int m;
int main()
{
int n, x, i;
char a[30];
scanf("%d\n", &n);
m = n;
BiTree T = NULL;
while(n--)
{
gets(a);
x = strlen(a);
for(i = 0; i < x; i++)
{
if(a[i] >= 'A' && a[i] <= 'Z')
a[i] = a[i] + 32;
}
T = Creat(T, a);
}
Inorder(T);
return 0;
}
BiTree Creat(BiTree &T, char a[])
{
if(!T)
{
T = (BiTree)malloc(sizeof(BiTnode));
T -> lchild = NULL;
T -> rchild = NULL;
strcpy(T -> data, a);
T -> num = 1;
}
else if(strcmp(T -> data, a) == 0)
T -> num++;
else
{
if(strcmp(T -> data, a) > 0)
Creat(T -> lchild, a);
else
Creat(T-> rchild, a);
}
return T;
}
void Inorder(BiTree T)
{
double k;
if(T)
{
Inorder(T -> lchild);
k = (T -> num * 1.0)/(m * 1.0) * 100;
printf("%s %.2lf%%\n", T -> data, k);
Inorder(T -> rchild);
}
}