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

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

2016-08-11 08:46 183 查看

题目描述

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

输入

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

输出

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

示例输入

2
This is an Appletree
this is an appletree


示例输出

this is an appletree 100.00%


提示

 
我的代码:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

struct hh

{

    char data[30];

    int num;

    struct hh *l,*r;

};

char a[30];

int n;

struct hh *creat(struct hh *p)

{

    if(p == NULL)

    {

        p=(struct hh *)malloc(sizeof(struct hh));

        p->l = NULL;

        p->r = NULL;

        p->num = 1;

        strcpy(p->data,a);

    }

    else

 {

        if(strcmp(a,p->data) == 0)

            p->num++;

        else if(strcmp(a,p->data) < 0)

            p->l=creat(p->l);

        else

            p->r=creat(p->r);

    }

    return p;

}

void in(struct hh *p)

{

    if(p!=NULL)

    {

        in(p->l);

        printf("%s %.2lf%%\n",p->data,1.0*p->num*100/n);

        in(p->r);

    }

}

int main()

{

    int i,j,m;

    struct hh *root;

    scanf("%d\n",&n);

    root = NULL;

    for(i=0;i<n;i++)

    {

        gets(a);

        m=strlen(a);

        for(j=0;j<m;j++)

        a[j]=tolower(a[j]);//关键!

        root=creat(root);

    }

    in(root);

    return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息