数据结构实验之查找三:树的种类统计
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
Author
xam
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
struct jian
{
char s[22];
int sum;
struct jian *l,*r;
};
int n;
jian *creat(jian *t,char *ss)
{
if(t==NULL)
{
t=new jian;
strcpy(t->s,ss);
t->l=t->r=NULL;
t->sum=1;
}
else
{
if(strcmp(t->s,ss)<0)
{
t->r=creat(t->r,ss);
}
else if(strcmp(t->s,ss)>0)
{
t->l=creat(t->l,ss);
}
else
t->sum++;
}
return t;
}
void mid(jian *t)
{
if(t)
{
mid(t->l);
printf("%s %.2lf%\n",t->s,t->sum*100.0/n);
mid(t->r);
}
}
int main()
{
int i;
cin>>n;
getchar();
jian *t=NULL;
for(int j=0;j<n;j++)
{
char ss[22];
gets(ss);
for(i=0;ss[i]!='\0';i++)
{
if(ss[i]>='A'&&ss[i]<='Z')
{
ss[i]+=32;
}
}
t=creat(t,ss);
}
mid(t);
cout<<endl;
}