Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description
随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。 Input
输入一组测试数据。数据的第1行给出一个正整数N (n <= 100000),N表示树的数量;随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20个字符的字符串,字符串由英文字母和空格组成,不区分大小写。 Output
按字典序输出各种树的种类名称和它占的百分比,中间以空格间隔,小数点后保留两位小数。 Example Input
2 This is an Appletree this is an appletree Example Output
this is an appletree 100.00% Hint
Author
xam
很好理解,不过要注意大小写字母~
#include <stdio.h> #include <string.h> #include <stdlib.h> struct node { char name[30]; int data; struct node *left, *right; }; int t; struct node * Insert(struct node *root, char name[]) { if(!root) { struct node * p = (struct node *)malloc(sizeof(struct node)); strcpy(p->name, name); p->data = 1; p->left = p->right = NULL; root = p; } else { if(strcmp(name, root->name)<0) root->left = Insert(root->left, name); else if(strcmp(name, root->name)>0) root->right = Insert(root->right, name); else root->data++; } return root; } void Show(struct node * root) { if(root) { Show(root->left); printf("%s %.2lf", root->name, root->data*100.0/t); printf("%c\n", '%'); Show(root->right); } } int main() { struct node * root = (struct node *)malloc(sizeof(struct node)); root = NULL; char m[30]; scanf("%d", &t); getchar(); for(int i=1;i<=t;i++) { gets(m); for(int j=0;m[j];j++) { if(m[j]>='A'&&m[j]<='Z') m[j]+= 32; } root = Insert(root, m); } Show(root); return 0; }