1、输入若干行树名,输入结束后,按字典序输出树名及其所占百分比。

2、多种方法:map,trie,BST

3、

map:

#include<iostream>
#include<stdio.h>
#include<string>
#include<map>
using namespace std; int main(){
map<string,int>h;
string s;
int n;
n=;
while(getline(cin,s)){
++n;
++h[s];
}
map<string,int>::iterator it;
for(it=h.begin();it!=h.end();++it){
string name=(*it).first;
int k=(*it).second;
printf("%s %.4f\n",name.c_str(),double(k)*/double(n));
}
}

trie:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std; const int MAX=;
char tree[][];//存储不同的树名
int species=;//树的种类数目
int totalNum=;//树的总数目 struct Trie
{
Trie *next[MAX];
int num;//出现次数
};
Trie *root=new Trie; void createTrie(char *str)
{
++totalNum;
int len = strlen(str);
Trie *p = root, *q;
for(int i=; i<len; ++i)
{
int id = str[i];
if(p->next[id] == NULL)
{
q = (Trie *)malloc(sizeof(Trie));
//q = new Trie;
for(int j=; j<MAX; ++j){
q->next[j] = NULL;
q->num=;
}
p->next[id] = q;
}
p = p->next[id];
}
if(p->num==)strcpy(tree[species++],str);
++p->num;
}
int findTrie(char *str)
{
int len = strlen(str);
Trie *p = root;
for(int i=; i<len; ++i)
{
int id = str[i];
p = p->next[id];
if(p == NULL) //若为空集,表示不存以此为前缀的串
return ;
}
return p->num;
}
int cmp(const void *a,const void *b){
return strcmp((char *)a,(char *)b);//升序
}
int main()
{
char str[];
int i;
for(i=; i<MAX; i++){
root->next[i]=NULL;
root->num=;
}
while(gets(str)){
createTrie(str);
}
qsort(tree,species,sizeof(tree[]),cmp);
for(i=;i<species;++i)
printf("%s %.4f\n",tree[i],double(findTrie(tree[i]))/double(totalNum)*);
return ;
}

BST:

最新文章

  1. js获取当前坐标
  2. Linux_LVM_磁盘扩容
  3. Linux_几个符号命令
  4. shell脚本 -d 是目录文件,那么-e,-f分别是什么?还有&quot;! -e&quot;这又是什么意思呢?
  5. Java网络编程总结
  6. firstElementChild&amp;&amp;firstChild
  7. 函数, lambda表达式
  8. web项目错误页面友好处理404,500等
  9. U盘无法安装win10提示Your PC/Device needs to be repaired
  10. AUTOSAR ArcticCore重构 - for_each_HOH
  11. BigDecimal 在for循环中相加注意事项
  12. blinker库
  13. javax.el.PropertyNotFoundException: Property &#39;XXX&#39; not found on type bean.XXXXX
  14. 【全网最全的博客美化系列教程】02.添加QQ交谈链接
  15. JAVA并发编程——守护线程(Daemon Thread)
  16. go连接mysql
  17. python 中文件输入输出及os模块对文件系统的操作
  18. ceph 搭建nginx负载3个对象网关
  19. Windows-universal-samples学习笔记系列三:Navigation
  20. openvSwitch 基本命令

热门文章

  1. 如何解决安装istio后istioctl命令每次使用都需要重新配置路径
  2. oracle sqlplus 导出csv文件
  3. python学习笔记--python简介
  4. [luoguP2831] 愤怒的小鸟(状压DP)
  5. MTK GPIO 新增变量配置
  6. Using DTrace to Profile and Debug A C++ Program
  7. xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。
  8. System表空间大小有10Gb,使用率达到95%,
  9. 还原数据库出现“未获得排他訪问”解决方法(杀死数据库连接的存储过程sqlserver)
  10. Linux面试题完整修订附加答案