题目描述
 
  随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。
 
  
 输入
 
  输入一组测试数据。数据的第1行给出一个正整数N (n <= 100000),N表示树的数量;随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20个字符的字符串,字符串由英文字母和空格组成,不区分大小写。
 
  
 输出
 
  按字典序输出各种树的种类名称和它占的百分比,中间以空格间隔,小数点后保留两位小数。
 
  
 示例输入
 
 2
This is an Appletree
this is an appletree
 
  
 示例输出
 
 this is an appletree 100.00%
 
  
 提示
 
 
 
 
 
 
 
 #include <stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #include<ctype.h>
 using namespace std;
 typedef int status;
 typedef char element;
 typedef struct BNode
 {
     element data[21];//树的名称;
     status sum;//统计树的种类;
     BNode *lchild,*rchild;
 }*BiTree;
 element s[21];
 status n;
 BiTree Insert(BiTree &T,element s[])//树的插入二叉排序树的生成;;
 {
     if(!T)
     {
         T=new BNode;
         T->rchild=T->lchild=NULL;
         strcpy(T->data,s);
          T->sum=1;
     }
     else
     {
         if(strcmp(T->data,s)==0)
             T->sum++;
         else if(strcmp(T->data,s)>0)
             T->lchild=Insert(T->lchild,s);
         else
             T->rchild=Insert(T->rchild,s);
     }
     return T;
 }
 void inorder(BiTree &T)//各种树所占的比例;
 {
     if(T)
     {
         inorder(T->lchild);//按字典序输出;
         printf("%s %.2lf",T->data,(1.0*T->sum/n)*100);
         printf("%%\n");
         inorder(T->rchild);
     }
 }
 status main()
 {
     scanf("%d",&n);
     BiTree T;
     T=NULL;
     getchar();
     for(status j=0;j<n;j++)
     {
         gets(s);
         status l=strlen(s);
         for(status i=0;i<l;i++)
             if(s[i]>='A'&&s[i]<='Z')
                 s[i]+=32;
        //===(s[i]=tolower(s[i]);//将大写字母转化为小写字母的函数包含在#include <ctype.h>头文件里)
         Insert(T,s);
     }
     inorder(T);
     return 0;
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 18 |        str[j]=tolower(str[j]); | 
 
  
 
 
 | 21 |    map<string,int>::iterator it; | 
 
  
 | 22 |    for(it=v.begin();it!=v.end();it++) | 
 
  
 
 
 | 25 |    printf(" %.2lf",it->second*100.0/n); |