数据结构实验之查找三:树的种类统计
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%
提示
排序建二叉树+字符数组应用&指针应用
示例程序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
struct node
{
char data[25];
int num;
node *lchild, *rchild;
} *root;
int n;
char str[25];
node *Insert(node *root, char *c)
{
if(!root)
{
root = new node;
root->num = 1;
strcpy(root->data, c);
root->lchild = NULL;
root->rchild = NULL;
}
else
{
if(strcmp(root->data, c) > 0)
root->lchild = Insert(root->lchild, c);
else if(strcmp(root->data, c) < 0)
root->rchild = Insert(root->rchild, c);
else
root->num++;
}
return root;
}
void inorder(node *root)
{
if(root)
{
inorder(root->lchild);
printf("%s %.2lf%\n", root->data, 100.0*(root->num)/n);
inorder(root->rchild);
}
}
int main()
{
scanf("%d", &n);
getchar();
root = NULL;
int m = n;
while(m--)
{
gets(str);
int l = strlen(str);
for(int i = 0; i < l; i++)
{
if(str[i] >='A'&&str[i] <='Z')
str[i] = str[i]+32;
}
root = Insert(root, str);
}
inorder(root);
return 0;
}