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

暑假集训 8.12 sdutoj3375 数据结构实验之查找三:树的种类统计 (简单字符排序二叉树)

2016-08-12 09:41 274 查看


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




Time Limit: 400ms   Memory limit: 65536K 



题目描述

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


输入

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


输出

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


示例输入

2
This is an Appletree
this is an appletree



示例输出

this is an appletree 100.00%


排序二叉树在字符数组上的使用 主要利用 strcmp 函数 比较字符数组的ascll ''大小''由此建树

///Accode

#include <bits/stdc++.h>  ///get到一个大宝藏(jian)

using namespace std;

const int maxn=23;
int n;

typedef struct tree
{
char name[maxn];
tree *lc,*rc;
double num;
} tree,*Tree;

void Insert(Tree &T,char s[])  ///不多说了....
{
if (!T)
{
T=new tree;
strcpy(T->name,s);
T->lc=NULL;
T->rc=NULL;
T->num=1;  ///出现过几次 num等于几....
return ;
}
else if (strcmp(T->name,s) > 0)
{
Insert(T->lc,s);
}
else if (strcmp(T->name,s) < 0)
{
Insert(T->rc,s);
}
else if (strcmp(T->name,s) == 0)
{
T->num++; ///相等的话  又出现了一次... num +1 ;
}
}

void midout(Tree &T)
{
double x;
if (T)
{
midout(T->lc);
x=T->num*100/n;
printf("%s %.2lf%%\n",T->name,x);
midout(T->rc);
}
}

int main()
{
char s[maxn];
Tree T;
cin>>n;
getchar(); /// 吃 一下回车
T=NULL;
for (int j=1; j<=n; j++)
{
gets(s);
for (int i=0; s[i]; i++)
{
if (s[i]>='A'&&s[i]<='Z')  ///将数组全部转换为 小写...
{
s[i]+=32;
}
}
Insert(T,s);
}
midout(T); ///中序打印 就是按照ascll... 字典序打印...
return 0;
}


///PS:排序二叉树 入门代码 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息