5-24 树种统计 (25分)
来源:互联网 发布:linux lsnrctl 编辑:程序博客网 时间:2024/04/28 20:03
5-24 树种统计 (25分)
随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。
输入格式:
输入首先给出正整数N(
输出格式:
按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后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%
思路
这些书中名称长度较长,且无明显规律,所以哈希算法并没优势。
下面的代码我是用了二叉搜索树的结构存储数据,在输出结果的时候用的是中序遍历。百分比是在输出的时候才计算。
点击访问 PTA-测验
#include<stdlib.h>#include<stdio.h>#include<string.h>/* 评测结果 时间 结果 得分 题目 编译器 用时(ms) 内存(MB) 用户2016-08-30 09:22 答案正确 25 5-24 gcc 501 13 569985011测试点结果 测试点 结果 得分/满分 用时(ms) 内存(MB)测试点1 答案正确 15/15 14 1测试点2 答案正确 2/2 1 1测试点3 答案正确 4/4 501 13测试点4 答案正确 4/4 85 6查看代码*///C语言stricmp()函数:比较字符串(不区分大小写#define lowcase(x) ((x)>='a'&&(x)<='z')#define capitol(x) ((x)>='A'&&(x)<='Z')typedef struct node *BinTree;struct node { char Data[33]; int cnt; BinTree Left; BinTree Right;};BinTree InsertT(BinTree BT,char*);BinTree BuildT(char*);void PrintT(BinTree,int);char*scan(void){ char*a=(char*)malloc(sizeof(char)*33); int i=0; char c; while((c=getchar())!='\n'){ a[i++]=c; } a[i]='\0'; return a;}int cmp(char*a,char*b){ for(;*a!='\0';a++,b++){ if(lowcase(*a)){ if(capitol(*b)){ if(*b+32==*a)continue; else return *a-*b; } if(*b==*a)continue; else return *a-*b; }else{ if(lowcase(*b)){ if(*b-32==*a)continue; else return *a-*b; } if(*b==*a)continue; else return *a-*b; } } return *a-*b;}int main() { int n; scanf("%d",&n); getchar(); char *a; BinTree BT=NULL; for(int i=0; i<n; i++) { a=scan(); BT=InsertT(BT,a);// printf("\n------%d----------\n",i+1); } PrintT(BT,n); return 0;}void PrintT(BinTree BT,int n) { if(BT) { PrintT(BT->Left ,n); double percent=(double)BT->cnt*100.0/n; printf("%s %0.4lf%%\n",BT->Data ,percent);// printf("{%d}",BT->cnt ); PrintT(BT->Right,n ); }}BinTree InsertT(BinTree BT,char*name) { BinTree head=BT; while(BT) { int flag=cmp(BT->Data ,name); if(flag<0) { if(BT->Right)BT=BT->Right ; else { BT->Right =BuildT(name); return head; } }else if(flag>0) { if(BT->Left )BT=BT->Left ; else { BT->Left =BuildT(name); return head; } }else{ BT->cnt+=1 ;// printf("[]"); return head; } } return BuildT(name);}BinTree BuildT(char*Data) { BinTree New=(BinTree)malloc(sizeof(struct node)); strcpy(New->Data ,Data); New->cnt =1; New->Left =NULL; New->Right =NULL; return New;}
0 0
- 5-24 树种统计 (25分)
- 5-24 树种统计 (25分)
- PTA-数据结构 5-24 树种统计 (25分)
- 7-24 树种统计(25 分)
- 7-24 树种统计(25 分)
- 5-12 树种统计 (25分)
- 树种统计(25 分)
- 5-24 树种统计
- 5-24 树种统计
- 5-24 树种统计 (二叉搜索树)
- 树种统计
- 树种统计
- 树种统计
- PTA 树种统计
- 7-12 树种统计
- 7-12 树种统计(25 point(s))(BST)
- 树种统计 静态内存 排序树
- PTA5-2 树种统计(map+vector+unique)
- 终端查MAC下的内存占用
- iOS版本管理工具SVN
- 68.Binary Tree Postorder Traversal-二叉树的后序遍历(容易题)
- 什么是P问题、NP问题和NPC问题
- Android 静默安装和智能安装的实现方法
- 5-24 树种统计 (25分)
- Unity3D之Vector3.Dot和Vector3.Cross的使用
- C++引用的实质
- OC-FUNDATION-NSDictionary&NSMutableDictionary&Block
- 剑指offer-二叉树的下一个结点
- C#答题程序
- 着鲜衣,卸心防,未曾料得竟痴狂。倾所有,尽所知,人世斑斓与之尝。百般思量,千言万语不成章,谨以嘘寒问短道天凉。人生难得几回醉……无妨无妨。
- python 中的私有变量申明和定义
- MySQL数据库中常用存储引擎总结