树种统计

来源:互联网 发布:淘宝购买手机模板 编辑:程序博客网 时间:2024/04/23 17:47

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

输入格式:

输入首先给出正整数N(\le 10^5105),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。

输出格式:

按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。

输入样例:

29Red AlderAshAspenBasswoodAshBeechYellow BirchAshCherryCottonwoodAshCypressRed ElmGumHackberryWhite OakHickoryPecanHard MapleWhite OakSoft MapleRed OakRed OakWhite OakPoplanSassafrasSycamoreBlack WalnutWillow

输出样例:

Ash 13.7931%Aspen 3.4483%Basswood 3.4483%Beech 3.4483%Black Walnut 3.4483%Cherry 3.4483%Cottonwood 3.4483%Cypress 3.4483%Gum 3.4483%Hackberry 3.4483%Hard Maple 3.4483%Hickory 3.4483%Pecan 3.4483%Poplan 3.4483%Red Alder 3.4483%Red Elm 3.4483%Red Oak 6.8966%Sassafras 3.4483%Soft Maple 3.4483%Sycamore 3.4483%White Oak 10.3448%Willow 3.4483%Yellow Birch 3.4483%

这题就是简单的建立搜索树(查找数) 然后用中序遍历下  顺便求下百分比

 还有printf("%");  是打印不出来 %符号的  要%% 才能打印%符号来
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct treenode *tree;struct treenode {tree left;tree right;char item[35];int num;};double num1;tree newnode(char c[]) {tree t;t = (tree)malloc(sizeof(struct treenode));strcpy(t->item, c);t->left = t->right = NULL;t->num = 1;return t;}tree insert(tree t, char c[]) {if (!t) t = newnode(c);else {if (strcmp(t->item, c) > 0) t->left = insert(t->left, c);else if(strcmp(t->item, c)<0) t->right=insert(t->right,c);else if (!strcmp(t->item, c)) t->num++;}return t;}tree buildtree(int n) {tree t; char c[35]; int i;gets(c);t = newnode(c);for (i = 1; i < n; i++) {gets(c);t = insert(t, c);}return t;}void treeprint(tree t,int n) {if (t) {treeprint(t->left,n);num1 = (double)(t->num) / n * 100;printf("%s %.4lf%%\n", t->item, num1);treeprint(t->right, n);}}int main(){int n; tree T;scanf("%d", &n);getchar();T = buildtree(n);treeprint(T, n);return 0;}


0 0
原创粉丝点击