数据结构实验之查找三:树的种类统计
Time Limit: 400MS
Memory Limit: 65536KB
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%
Hint
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
struct Tree
{
char ch[22];
int data;
Tree *left,*right;
};
Tree *f(Tree *head,char *s)
{
if(!head)
{
head=new Tree;
head->data=1;
strcpy(head->ch,s);
head->left=NULL;
head->right=NULL;
}
else
{
int cmp=strcmp(head->ch,s);
if(cmp>0)
{
head->left=f(head->left,s);
}
else if(cmp<0)
{
head->right=f(head->right,s);
}
else
{
head->data++;
}
}
return head;
}
void Mid(Tree *head)
{
if(head)
{
Mid(head->left);
printf("%s %.2lf%c\n",head->ch,head->data*100.0/n,'%');///!!!!!!!点2
Mid(head->right);
}
}
int main()
{
cin>>n;
getchar();
Tree *head=NULL;
for(int j=0;j<n;j++)
{
char a[22];
gets(a);
for(int i=0;a[i];i++)
{
if(a[i]>='A' && a[i]<='Z')
{
a[i]+=32;
}
}
head=f(head,a);
}
Mid(head);
return 0;
}