5-24 树种统计

来源:互联网 发布:网博 软件测试 编辑:程序博客网 时间:2024/04/26 05:29

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

输入格式:

输入首先给出正整数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%

//使用scanf,printf,char* 而不是cin,cout ,string

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include"string.h"#include<vector>#include<iomanip>#include<algorithm>using namespace std;class node;node*creatnode(char name[31]);node*insert(node &t, char name[31]);void inorder(const node&t, int N);class node{public:char name[31];int count;node*left;node*right;};int main(){int N;node t;cin >> N;char a[32] = "";//输入字符串gets(a);gets(a);strcpy(t.name ,a);//拷贝t.left = NULL;t.right = NULL;t.count = 1;for (int i = 1; i < N; i++){gets(a);insert(t, a);}inorder(t, N);return 0;}node*creatnode(char name[31]){node*tmp = new node;strcpy(tmp->name , name);tmp->count = 1;tmp->right = NULL;tmp->left = NULL;return tmp;}node*insert(node &t, char name[31]){int result =strcmp(t.name,name);if (result == 0){t.count += 1;return &t;}if (result >0){if (t.left == NULL){t.left = creatnode(name);}else{insert(*t.left, name);}}if (result <0){if (t.right == NULL)t.right = creatnode(name);elseinsert(*t.right, name);}return &t;}void inorder(const node&t, int N){if (&t == NULL)return;inorder(*t.left, N);{printf("%s %0.4lf%c\n", t.name, t.count / (N*1.0) * 100, '%');}inorder(*t.right, N);}





原创粉丝点击