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

来源:互联网 发布:2017年人工智能股票 编辑:程序博客网 时间:2024/05/16 11:13

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

Time Limit: 400MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

2This is an Appletreethis 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;}

1 0