SDUT 3375 数据结构实验之查找三:树的种类统计
数据结构实验之查找三:树的种类统计
Time Limit: 400 ms Memory Limit: 65536 KiB
Problem Description
随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。
Input
输入一组测试数据。数据的第1行给出一个正整数N (n <= 100000),N表示树的数量;随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20个字符的字符串,字符串由英文字母和空格组成,不区分大小写。
Output
按字典序输出各种树的种类名称和它占的百分比,中间以空格间隔,小数点后保留两位小数。
Sample Input
2 This is an Appletree this is an appletree
Sample Output
this is an appletree 100.00%
提示:本题所运用的是字符串的比较,将其中相同的地方全都置到树的同一边,再进行判断
代码实现如下(g++):
#include <bits/stdc++.h> using namespace std; typedef struct node { char data[22]; int d; struct node *left,*right; } node; int n; node *create(node *root,char *a)//建树 { if(!root) { root=new node; root->d=1;//记数 strcpy(root->data,a); root->left=NULL; root->right=NULL; } else { int t=strcmp(root->data,a); if(t>0) { root->left=create(root->left,a); } else if(t<0) { root->right=create(root->right,a); } else//如果相等,就使root->d加一 { root->d++; } } return root; } void midsort(node *root) { if(root) { midsort(root->left); printf("%s %.2lf%%\n",root->data,root->d*100.0/n);//用root->d/n来表示每种树的百分比 midsort(root->right); } } int main() { node *root=NULL; char a[22]; scanf("%d",&n); getchar(); for(int j=0;j<n;j++) { gets(a); int len=strlen(a); for(int i=0; i<len; i++) { if(a[i]>='A'&&a[i]<='Z')//不区分大小写,就全置为小写 { a[i]+=32; } } root=create(root,a); } midsort(root); return 0; } /*************************************************** Result: Accepted Take time: 0ms Take Memory: 240KB ****************************************************/