您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之查找三:树的种类统计

2016-08-11 17:19 295 查看


数据结构实验之查找三:树的种类统计



Time Limit: 400MS Memory limit: 65536K


题目描述

随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。


输入

输入一组测试数据。数据的第1行给出一个正整数N (n <= 100000),N表示树的数量;随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20个字符的字符串,字符串由英文字母和空格组成,不区分大小写。


输出

按字典序输出各种树的种类名称和它占的百分比,中间以空格间隔,小数点后保留两位小数。


示例输入

2
This is an Appletree
this is an appletree



示例输出

this is an appletree 100.00%



提示:把这一串字符看做一个数字,将字典序看做数字的升序,建排序树是升序,而排序树的中序遍历则是升序的输出,一样的数字就num++;这样就简单明了多了;


来源

xam 


示例程序

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
typedef char element;
typedef struct BiTnNode
{
element data[22];
int num;//标记此数字(字符串)的出现次数;
BiTnNode *lchild,*rchild;
}BiTnNode, *BiTree;

void CreateTree(BiTree &T,char *key)//插入建排序树;
{
if(T==NULL)
{
T=new BiTnNode;
T->num=1;
strcpy(T->data,key);
T->lchild=T->rchild=NULL;
}
else
{
if(strcmp(key,T->data)<0)
{
CreateTree(T->lchild,key);
}
else if(strcmp(key,T->data)>0)
{
CreateTree(T->rchild,key);
}
else
{
T->num++;
}
}
}
void InOrder(BiTree T)
{
if(T)
{
InOrder(T->lchild);
printf("%s %.2lf%c\n",T->data,100.0*T->num/n,'%');
InOrder(T->rchild);
}
}
int main()
{
int i;
char a[22];
BiTree T;
T=NULL;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
gets(a);
int l=strlen(a);
for(int j=0;j<l;j++)//统一化处理
{
if(a[j]>='A'&&a[j]<='Z')
a[j]=a[j]+32;
}
CreateTree(T,a);///插入一个数字(字符串);
}
InOrder(T);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: