当前位置: 首页 > news >正文

PTA:哈夫曼编码

题干

只有一行,是一个字符串,由长度不超过255个字符的小写英文字母组成。

输出格式:
有若干行,每行由两部分组成:一个字母和该字母出现的频率,中间用一个空格分隔,并按频率高低排列,频率相同时则按字母的ASCII码的先后顺序排列。

输入样例:
soon
输出样例:
o 2
n 1
s 1

解题过程

#include <stdio.h>
#include <string.h>
struct CharFreq {char letter;int frequency;
};
int compare(const void *a, const void *b) {struct CharFreq *charFreqA = (struct CharFreq *)a;struct CharFreq *charFreqB = (struct CharFreq *)b;if (charFreqA->frequency != charFreqB->frequency) {return charFreqB->frequency - charFreqA->frequency;} else {return charFreqA->letter - charFreqB->letter;}
}
int main() {char input[256];scanf("%s", input);int freq[26] = {0};int len = strlen(input);for (int i = 0; i < len; ++i) {if (input[i] >= 'a' && input[i] <= 'z') {freq[input[i] - 'a']++;}}struct CharFreq charFreqs[26];for (int i = 0; i < 26; ++i) {charFreqs[i].letter = 'a' + i;charFreqs[i].frequency = freq[i];}qsort(charFreqs, 26, sizeof(struct CharFreq), compare);for (int i = 0; i < 26; ++i) {if (charFreqs[i].frequency > 0) {printf("%c %d\n", charFreqs[i].letter, charFreqs[i].frequency);}}return 0;
}

相关文章:

  • class067 二维动态规划【算法】
  • 自然语言处理:电脑如何理解我们的语言?
  • Spring Cloud + Vue前后端分离-第3章 SpringBoot项目技术整合
  • spring security面经-字节飞书生产力工具后端一面
  • Google Bard vs. ChatGPT 4.0:文献检索、文献推荐功能对比
  • Linux AMH服务器管理面板本地安装与远程访问
  • 30 剑指offer-动态规划求正则表达式匹配
  • 第九天:信息打点-CDN绕过篇amp;漏洞回链amp;接口探针amp;全网扫描amp;反向邮件
  • 数据结构和算法专题---2、算法思想
  • 把 Windows 11 装进移动硬盘:Windows 11 To Go
  • UDP协议实现群聊
  • C++ 多态性(Polymorphism)和 虚函数(Virtual Functions)
  • Kubernetes里的DNS;API资源对象ingress;Kubernetes调度;节点选择器NodeSelector;节点亲和性NodeAffinity
  • 五:爬虫-数据解析之xpath解析
  • 【C++】简单工厂模式
  • [译]如何构建服务器端web组件,为何要构建?
  • 《深入 React 技术栈》
  • 【comparator, comparable】小总结
  • C语言笔记(第一章:C语言编程)
  • docker容器内的网络抓包
  • express.js的介绍及使用
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Octave 入门
  • Python 反序列化安全问题(二)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python3爬取英雄联盟英雄皮肤大图
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Vue.js-Day01
  • Xmanager 远程桌面 CentOS 7
  • 初探 Vue 生命周期和钩子函数
  • 从setTimeout-setInterval看JS线程
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 数据仓库的几种建模方法
  • 我从编程教室毕业
  • k8s使用glusterfs实现动态持久化存储
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • #mysql 8.0 踩坑日记
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (六)激光线扫描-三维重建
  • (论文阅读11/100)Fast R-CNN
  • .describe() python_Python-Win32com-Excel
  • .NET 8 跨平台高性能边缘采集网关
  • .Net core 6.0 升8.0
  • .net mvc 获取url中controller和action
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 命令行参数包含应用程序路径吗?
  • .Net 执行Linux下多行shell命令方法
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET的数据绑定