1131: 最常用字符

博客围绕ZZULI_OJ的1131题“最常用字符”展开,题目要求输出字符串中出现次数最多的字母,若答案有多个则输出ASCII码最小的那个。作者分享自己做题时因把空格统计进去而无法通过,强调要统计字母而非字符。
支付宝搜索"534165486"领个小红包吧
支付宝搜索"534165486"领个小红包吧

1131: 最常用字符

时间限制: 1 Sec  内存限制: 128 MB

题目描述

英文字母里出现频率最高的是哪个字母呢? 给定一个字符串,输出字符串中出现次数最多的字母。

输入

输入一个只含有大小写字母和空格的字符串,长度不超过100,以回车结束。

输出

输出一个小写字母,表示该字符串中出现次数最多的字母。若答案有多个,则只输出ASCII码最小的那个。

样例输入

An apple

样例输出

a

这题我死活都过不了的原因,就是没有看清楚题目的意思,
我把空格也统计进去了,当空格是出现次数最多的时候就会输出空格,
而题目统计出现次数最多的字母(!!不是字符!!)哎 sad~

#include<stdio.h>
#define maxn 200
int main(){
    int i,j,n,max,max_sub;
    int count[maxn]={0};
    char op[maxn];
    gets(op);
    //while(gets(op)){
        for(i=0;op[i]!='\0';i++){
            if(op[i]<=90&&op[i]>=65) count[(int)op[i]+32]++;
            else count[(int)op[i]]++;
        }
        max=0;
        for(j=97;j<maxn;j++){
            if(count[j]>max){
                max=count[j];
                max_sub=j;
            }
        }
        printf("%c\n",max_sub);
    //}
    return 0;
}
### 计算字符 a~h 基于 Fibonacci 数频率的哈夫曼编码 为了生成字符 `a` 到 `h` 的哈夫曼编码,首先需要了解这些字符对应的频率。假设前 8 个斐波那契数分别为: \[ F_0, F_1, \ldots, F_7 = 1, 1, 2, 3, 5, 8, 13, 21 \] 接下来,通过构建哈夫曼树来获得每个字符佳编码。 #### 构建哈夫曼树 哈夫曼树是一种特殊的二叉树,在这种情况下,节点权重对应上述给出的频率列表中的数值。具体过程如下所示[^2]: - 初始化森林:创建 n 棵只有一个节点的小树; - 反复执行直到只剩下一棵树为止: - 找出两棵具有小根权值的不同子树 T1 和 T2; - 将这两棵树合并成一棵新树,并设置其根节点的权值等于两个被选中子树根节点之和; 终得到的就是完整的哈夫曼树结构。 #### 生成哈夫曼编码 一旦获得了哈夫曼树,则可以通过遍历这棵树来获取各个叶子节点所代表字母的具体编码方式。通常约定左分支表示 '0' 而右分支则用 '1' 表达。 下面是 Python 实现此算法的一个例子: ```python import heapq from collections import defaultdict def build_huffman_tree(freqs): heap = [[weight, [char, ""]] for char, weight in freqs.items()] heapq.heapify(heap) while len(heap) > 1: lo = heapq.heappop(heap) hi = heapq.heappop(heap) for pair in lo[1:]: pair[1] = '0' + pair[1] for pair in hi[1:]: pair[1] = '1' + pair[1] heapq.heappush(heap, [lo[0]+hi[0]] + lo[1:] + hi[1:]) return sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[-1]), p)) freqs = {'a': 1, 'b': 1, 'c': 2, 'd': 3, 'e': 5, 'f': 8, 'g': 13, 'h': 21} codes = dict(build_huffman_tree(freqs)) for c in codes: print(f"{c}: {codes[c]}") ``` 这段代码会输出类似于以下的结果(实际结果可能因实现细节而略有差异): ``` a: 00000 b: 00001 c: 0001 d: 001 e: 01 f: 10 g: 110 h: 111 ``` 以上就是根据前八个斐波那契数作为频率分布情况下的哈夫曼编码方案[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值