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

来源:互联网 发布:ettercap for windows 编辑:程序博客网 时间:2024/06/06 03:08

Think:
直接用排序树解题就行, 注意的是不分大小写, 所以要进行字符串的判断处理, 同时要注意 输入时的回车键,也要进行处理。

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%

#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;struct node{    char str[1050];    int cnt;    struct node *l, *r;};int n;int kk = '%';struct node *Insert(struct node *head, char *temp);void zhonxu(struct node *head);int main(){    char temp[1050];    while(~scanf("%d\n", &n))    {        struct node *head;        head = NULL;        memset(temp, 0, sizeof(temp));        for (int k = 0; k <= n - 1; k ++)        {            gets(temp);            int d = strlen(temp);            for (int i = 0; i <= d - 1; i ++)            {                if (temp[i] >= 'A' && temp[i] <= 'Z')                    temp[i] = temp[i] + 32;            }            head = Insert(head , temp);        }        zhonxu(head);    }}struct node *Insert(struct node *head, char *temp){    if(head == NULL)    {        head = new node;        head -> cnt = 1;        strcpy(head -> str, temp);        head -> l = head -> r = NULL;    }    else    {        int k = strcmp(temp, head -> str);        if (k > 0)            head -> r = Insert(head -> r, temp);        if (k < 0)            head -> l = Insert(head -> l, temp);        if (k == 0)            head -> cnt ++;    }    return head;};void zhonxu(struct node *head){    if (head)    {        zhonxu(head -> l);        printf("%s %.2lf%c\n", head -> str, (head -> cnt * 100.0) / n, kk);        zhonxu(head -> r);    }}
原创粉丝点击