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

来源:互联网 发布:linux显示文件大小命令 编辑:程序博客网 时间:2024/06/07 13:12

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%

注意点:
1。不区分大小写,所以把大写全部转化成小写
2。先输入一个数,下一行输入字符串的情况:一定注意换行!!!如果忽略会把它当做要输入的字符串
3。输出%,用转义字符输出 %%

本题:
二叉树排序建树 + 中序遍历

#include <iostream>#include <stdio.h>#include <cstring>using namespace std;typedef struct node{    char name[25];    int num;//个数标记    struct node *l, *r;}Binode, *Bitree;int n;void creat(Bitree &T, char s[25]){    if(!T)//空树    {        T = new Binode;        strcpy(T->name, s);//把s复制给T->name        T->num = 1;        T->l = T->r = NULL;    }    else    {        int cmp = strcmp(T->name, s);        if(cmp > 0)//名字小于就左孩子        {            creat(T->l, s);        }        else if(cmp < 0)            creat(T->r, s);        else//名字相同即为同种            T->num++;    }}void search(Bitree T){    if(T)//非空树    {        search(T->l);        printf("%s %.2lf%%\n", T->name, (T->num*100.0)/n);        search(T->r);    }}int main(){    cin>>n;    getchar();//读取换行    //scanf("%d\n", n);    Bitree T;    T = NULL;    char s[25];    for(int j = 0; j < n; j++)    {        gets(s);        int m = strlen(s);        for(int i = 0; i < m; i++)        {            if(s[i] >= 'A'&& s[i] <= 'Z')            {                s[i] += 32;//把大写字母都转化成小写字母            }        }        creat(T, s);    }    search(T);    return 0;}
原创粉丝点击