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

来源:互联网 发布:网络密匙 编辑:程序博客网 时间:2024/06/04 00:48

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

Time Limit: 400MS Memory Limit: 65536KB
Submit Statistic

Problem Description

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

Input

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

Output

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

Example Input

2This is an Appletreethis is an appletree

Example Output

this is an appletree 100.00%
思路:设置一个字符数组,输入时别忘了用getchar来存回车,输入一个字符数组作为植物的名称存下来,用strcpy来复制名字,用strcmp来判断两种植物的大小,最后利用中序遍历输出字典序,head->cut表示所占数量,除以n表示所占比重。注意大小写是一样的
#include<bits/stdc++.h>using namespace std;struct node {     char name[22];     int cnt;     node *l,*r; }; int n; node *creat(node*head,char *s) {     if(!head)     {         head=new node;         head->cnt=1;         strcpy(head->name,s);         head->l=NULL;         head->r=NULL;     }     else     {         int cmp=strcmp(head->name,s);         if(cmp>0)         {             head->l=creat(head->l,s);         }         else if(cmp<0)         {             head->r=creat(head->r,s);         }         else         {             head->cnt++;         }     }     return head; } void mid(node *head) {     if(head)     {         mid(head->l);         printf("%s %.2lf%c\n",head->name,head->cnt*100.0/n,'%');         mid(head->r);     } } int main() {     node *head=NULL;     char w[22];     cin>>n;      getchar();///输入的回车也算了一个字符     for(int j=0;j<n;j++)     {         gets(w);         for(int i=0;w[i];i++)         {             if(w[i]>='A'&&w[i]<='Z')             {                 w[i]+=32;             }         }         head=creat(head,w);     }     mid(head);     return 0; }