5-24 树种统计 (25分)

5-24 树种统计   (25分)

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

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%按字典序排列的问题可以多考虑用二叉树

方法一代码:(用STL编写)
 1 #include <iostream>
 2 #include <string>
 3 #include <map>
 4 #include <algorithm>
 5
 6 #define MAX 100000 + 10
 7
 8 using namespace std;
 9
10 typedef struct {
11     string name;
12     int num;
13 } Tree;
14
15 Tree tree[MAX];
16
17 int member = 1;
18 map<string, int> mp;
19
20 void findTree( string name ) {
21     if( mp[name] == 0 ) {
22         mp[name] = member;
23
24         tree[member].name = name;
25         tree[member].num++;
26
27         member++;
28     }
29     else {
30         int id = mp[name];
31         tree[id].num++;
32     }
33
34 }
35
36 int cmp( Tree a, Tree b ) {
37     return a.name < b.name ? 1 : 0;
38 }
39
40 int main() {
41     //freopen( "123.txt", "r", stdin );
42     int n;
43     scanf( "%d", &n );
44     char ch = getchar();
45     string name;
46     for( int i = 0; i < n; i++ ) {
47         getline( cin, name );
48         findTree( name );
49     }
50
51     sort( tree + 1, tree + member, cmp );
52
53     for( int i = 1; i < member; i++ ) {
54         printf( "%s %.4lf%%\n", tree[i].name.c_str(), (double)tree[i].num * 100.0 / n );
55     }
56
57     return 0;
58 }  

方法二代码:(二叉搜索树)



 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define MAX 30
 5 typedef char ElemType;
 6 typedef struct node *Bintree;
 7 typedef struct node
 8 {
 9     ElemType s[MAX+1];
10     int count;
11     Bintree lchild;
12     Bintree rchild;
13 }node;
14 Bintree Insert(Bintree BST,ElemType s[])
15 {
16     if(!BST)
17     {
18         BST=(Bintree)malloc(sizeof(struct node));
19         strcpy(BST->s,s);
20         BST->count=1;
21         BST->lchild=BST->rchild=NULL;
22     }
23     else
24         if(strcmp(BST->s,s)<0)
25             BST->rchild=Insert(BST->rchild,s);
26         else if(strcmp(BST->s,s)>0)
27             BST->lchild=Insert(BST->lchild,s);
28         else
29             BST->count++;
30     return BST;
31 }
32 void Inorder(Bintree BST,int N)//中序遍历搜索二叉搜索树,就得到了按字典序列递增的输出序列
33 {
34     if(BST)
35     {
36         Inorder(BST->lchild,N);
37         printf("%s %.4f%%\n",BST->s,(float)BST->count/N*100);
38         Inorder(BST->rchild,N);
39     }
40 }
41 int main()
42 {
43     int N,i;
44     char s[MAX];
45     Bintree T;
46     T=NULL;
47     scanf("%d",&N);
48     getchar();
49     for(i=0;i<N;i++)
50     {
51         gets(s);
52         T=Insert(T,s);
53     }
54     Inorder(T,N);
55     return 0;
56 }

 
时间: 2024-12-27 07:57:17

5-24 树种统计 (25分)的相关文章

PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)

1013 Battle Over Cities (25 分) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any oth

7-24 树种统计

7-24 树种统计(25 分) 随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. 输入格式: 输入首先给出正整数N(≤10?5??),随后N行,每行给出卫星观测到的一棵树的种类名称.种类名称由不超过30个英文字母和空格组成(大小写不区分). 输出格式: 按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位. 输入样例: 29 Red Alder Ash Aspen Basswood

1121 Damn Single (25 分)

1121 Damn Single (25 分) "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are supposed to find those who are alone in a big party, so they can be taken care of. Input Specification: Each input file contains one tes

4-9 二叉树的遍历 (25分)

4-9 二叉树的遍历   (25分) 输出样例(对于图中给出的树): Inorder: D B E F A G H C I Preorder: A B D F E C G H I Postorder: D E F B H G I C A Levelorder: A B C D F G I E H 代码:(都是遍历的算法) 1 // 4-9 二叉树的遍历 2 // 3 // Created by Haoyu Guo on 04/02/2017. 4 // Copyright ? 2017 Haoy

5-20 表达式转换 (25分)

5-20 表达式转换 (25分) 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程序将中缀表达式转换为后缀表达式. 输入格式: 输入在一行中给出不含空格的中缀表达式,可包含+.-.*.\以及左右括号( ),表达式不超过20个字符. 输出格式: 在一行中输出转换后的后缀表达式,要求不同对象(运算数.运算符号)之间以空格分隔,但结尾不得有多余空格. 输入样例: 2+3*(7-4)+8/4 输出样例: 2 3 7 4

5-3 树的同构 (25分)

5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后,就得到另外一棵树.而图2就不是同构的. 图1 图2 现给定两棵树,请你判断它们是否是同构的. 输入格式: 输入给出2棵二叉树树的信息.对于每棵树,首先在一行中给出一个非负整数NN (\le 10≤10),即该树的结点数(此时假设结点从0到N-1N?1编号):随后NN行,第i

PTA 10-排序6 Sort with Swap(0, i) (25分)

题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/678 5-16 Sort with Swap(0, i)   (25分) Given any permutation of the numbers {0, 1, 2,..., N-1N?1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is

PAT 天梯赛 是否同一棵二叉搜索树&#160;&#160;&#160;(25分)(二叉搜索树)

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数NNN (≤10\le 10≤10)和LLL,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出NNN个以空格分隔的正整数,作为初始插入序列.最后LL

07-图4 哈利&#183;波特的考试(25 分)多源最短路,邻接矩阵

哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫.另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠.老鼠变鱼的魔咒连起来念:hahahehe. 现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物.老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定动物的本事