蓝桥杯 摩尔斯电码破译 树上的搜索

【数据结构/C++】二叉树和栈实现摩尔斯码编码和解码 一个摩斯密码本可以使用一棵二叉树来存储: 现在,小明想在课上偷偷跟你传纸条,但又不想被其他同学看到内容。因此他跟你约定,每次给你传纸条时都使用摩斯密码来编写。至于密码本,当然不能使用国际通用的,他会在课前告诉你密码本的内容。然而小明发现,每次写纸条、读纸条都不是很方便,所以他想让你做个程序来自动编码/解码你们的摩斯密码。 1. 小明会按照前序的方式输入一棵二叉树。例如,输入$ACG##H#... 阅读详情

摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用' * '表示' . ',中间空格用' | '表示,只转化字符表。


首先是读入问题,采用scanf一次将所有输入全部放入一个字符组中。然后搜素保存好的字符,输出对应的字母。

问题是,如何判断字符串与字母的对应关系。

观察题中所给表格,发现只存在“-”和“*”两种符号且一共24种组合。可以考虑使用二叉树保存表格往左为“*”往右为“-”使字母与二叉树的节点相对应。


二叉树编号从一开始由上至下由左至右依次排列,在根据表格在相应位置填入字母,在没有字母的节点使用特殊数字表示(我用1表示没有相应字母)。最后将该二叉树保存,我使用一维数组保存,用数组下标表示结点编号,数组存储字母和特殊字符。

在树中搜索时只需定义变量i=1;当为*时i=i*2;为-时i=i*2+1;为|时输出以当前i值为下标的字母并且将i值重新置1.

#include <stdio.h>
#include<string.h>
int main(void)
{
	char str[100000];
	char found[33]={"11etianmsurwdkgohvf1l1p1b1cyzq11"};/*保存了整颗树*/
	int cur,i,a;
	scanf("%s",str);
	a=strlen(str);
	for(cur=0,i=1;cur<a;cur++)   /*遍历完输入的所有字符*/
	{
		switch(str[cur])           /*搜索树*/
		{
			case 42:i*=2;break;
			case '-':i=i*2+1;break;
			case '|':printf("%c",found[i]);i=1;break;
			default:;
		}
	}
	printf("%c",found[i]);          /*由于最后一组字母没有以|结束,这里用于将其直接输出*/
    return 0;
}




初识密码学 摩尔斯电码 点划图像二叉树 SOS并不是任何求救英文的缩写,而是因为在摩尔斯电码中,S为. . .,O为_ _ _,所以SOS对于发报方是最容易发出的信号,对于接收方是最容易识别的信号,因此国际无线电报公约组织于1908年正式将它确定为国际通用海难求救信号。 希尔密码 这里举个简单的例子,具体原理不太懂。。。 加密之前对26个字母进行编码,做一个密码字典:A=0,B=1,C=2,⋯⋯  ,X=23,Y=24,Z=25A=0,B=1,C=2,\cdots 阅读详情

相关推荐

【Arduino创意】制作摩尔斯电码解码器

实验现象 按下按键,根据按下按键时间长短进行编码,按下时间较长为虚线,按下时间较短为点。在LCD1602模块实时显示解码结果。 理论学习 LCD1602主要技术参数 显示容量为16×2个字符; 芯片工作电压为4.5~5.5V; 工作电流为2.0mA(5.0V); 模块最佳工作电压为5.0V; 字符尺寸为2.95×4.35(W×H)mm。 图1 1602液晶接口引脚定义 图2 1602液晶的...

weixin_43319452的博客 5982

摩尔斯电码_摩尔斯电码二叉树和baader meinhof现象

摩尔斯电码The other night I was watching some videos by 2 Youtube channels I really like. The first one was Tom Scott’s video on why the Prime Meridian isn’t exactly at 0 degrees. I noticed that he happene...

weixin_26729165的博客 3429

数据结构实验-二叉树的建立、遍历、摩斯电码(哈夫曼树)的编码与解码实验代码

数据结构关于二叉树的建立遍历以及应用二叉树进行编解码 实验要求 必做部分 1. 小明会按照前序的方式输入一棵二叉树。例如,输入$ACG##H##D##BE#I##F##的话,代表了下面这棵树: 2. 请分别按照前序、中序、后序输出这棵树。 选做部分 背景 在影视剧中,我们经常会看到二战期间情报人员使用电报哒哒哒地发送信息,发送电报所使用的编码叫做摩尔斯电码(或者叫做摩斯密码)。甚至在现代,SOS仍然是国际通用的求救信号之一,其“三短、三长、三短”同样是摩斯密码的编码方式。 摩斯密码使用若干个“点”和“划”来表示一个字母,字母和字母之间使用短暂的停顿来表示。例如,一种常见的编码方式为: 字母 摩斯密码 字母 摩斯密码 A .- E . B -... F ..-. C -.-. G --. D -.. H .... 实际上,一个摩斯密码本可以使用一棵二叉树来存储: 上图表示,从根节点start开始,遇到一个点(Dot)就访问它的左子树节点,遇到一个划(Dash)就访问它的右子树节点。例如,三个点...代表了S,三个划---代表了O。所以SOS的摩斯密码是... --- ...(中间用空格隔开,表示短暂的停顿)。再比如,爱疯手机有一种来电铃声的节奏为“哇哇哇 哇-哇- 哇哇哇”,这其实表示的是…… 现在,小明想在课上偷偷跟你传纸条,但又不想被其他同学看到内容。因此他跟你约定,每次给你传纸条时都使用摩斯密码来编写。至于密码本,当然不能使用国际通用的,他会在课前告诉你密码本的内容。然而小明发现,每次写纸条、读纸条都不是很方便,所以他想让你做个程序来自动编码/解码你们的摩斯密码。 题目要求 首先,小明输入的那棵二叉树,代表了你们在这堂课上要使用的摩斯密码本。例如,输入$ACG##H##D##BE#I##F##的话,代表了下面这棵树: 第一个字母$是什么并不重要,因为它只是代表了根节点,而根节点在我们的摩斯电码中并不代表一个字符,仅仅代表“start”。 读入密码本后,请记得按照前序、中序、后序输出这棵树。 然后,小明会输入一个数,代表接下来输入的是明文还是摩斯电码。输入0表示接下来他会输入明文,输入1表示接下来输入的是摩斯电码,输入-1程序退出。 1. 如果输入的是0,代表接下来要输入的是明文。程序接受一个字符串,根据字符串中每一个字母输出对应的摩斯电码,用空格隔开。例如如果小明输入“BED”,则程序应该输出“-空格-.空格.-”。如果遇到密码本中没有的字符,则输出“输入有误”。 2. 如果输入的是1,则表示接下来要输入摩斯电码。小明首先会输入一个数字N,代表有几个电码的输入,例如输入4代表之后会输入4个电码(即这个单词有四个字母)。随后输入空格分割的电码,例如, .. . -- -. 程序需要根据摩斯电码解读出明文单词并输出,例如上面的电码表示“CAFE”。如果遇到密码本中没有的编码,则输出“输入有误”。 输入输出样例 必做部分: 请输入二叉树: $ACG##H##D##BE#I##F## 前序遍历:$ACGHDBEIF 中序遍历:GCHAD$EIBF 后序遍历:GHCDAIEFB$ 选做部分: 请选择(0为明文,1为电码,-1退出):0 请输入明文:BED 摩斯电码为:- -. .- 请选择(0为明文,1为电码,-1退出):1 请输入电码个数:4 请输入电码:.. . -- -. 明文为:CAFE 请选择(0为明文,1为电码,-1退出):-1 // 程序结束

用C++和二叉树实现简单的摩斯密码翻译器

摩斯密码由“-”和“.”组成,而大多数摩斯密码翻译器的原理为对需要解密的字符串和标准串进行每个元素的遍历和比较,时间复杂度很高。而建立一个二叉树,以左子树代表“-”,右子树代表“.”可以节省看空间还可以免去不匹配情况的遍历。两全其美。 注:此程序能够解密/加密的范围为(26个字母、0-9自然数、“-”和“.”) 解密输入格式举例: -.- .-. .-.. .--- -.-. -... (回车结束,每个字符串之间相隔一个空格) 加密输入格式举例: Ea18 -.87awraWqE (回车结...

m0_62102955的博客 2275

C++文本加密程序(摩尔斯码、栅栏码等)

内容包含对文本进行摩尔斯编码、栅栏编码、逆序编码等加密函数,用C++编写

CameraLink接口详解:从引脚定义到信号传输

本文详细解析了CameraLink接口的物理连接与信号传输机制。从MDR26连接器的引脚定义与镜像关系入手,深入讲解了BASE与MEDIUM模式下的信号映射、LVDS差分传输原理,并强调了屏蔽层处理与端接电阻等关键硬件设计细节。文章结合实战经验,提供了常见图像传输问题的排查思路,是工业视觉领域高速图像传输的实用指南。

weixin_28318011的博客 889

没错,我是高端吃瓜玩家(搞懂摩斯密码)

前言大家好,我是bigsai大赛哥,好久不见,甚是想念。行了,咱们步入正轨,已经进入2022,在2021这一年,很多人的快乐消遣是在吃瓜快乐中度过的,有的作为主动吃瓜群众第一手掌握消息,有...

bigsai 8027

基于RK3562J开发板的MCP2518FD CAN-FD控制器驱动适配与测试指南

本文详细介绍了在RK3562J开发板上适配MCP2518FD CAN-FD控制器驱动的完整流程。内容涵盖内核驱动配置、设备树修改、编译烧录以及实际通信测试,重点分享了调试方法,旨在帮助开发者快速为嵌入式系统扩展高速CAN-FD通信能力,适用于汽车电子、工业控制等场景。

jenkins8butler的博客 495

用计算机思维认识摩斯密码(摩斯密码速记)

摩斯密码,又称摩尔斯密码,或者摩斯代码。 是十九世纪摩尔斯发明的一种靠单音就能传播信息的编码方式。 但是一般介绍莫斯代码都是按照26

yilonglucky 2万+

原理图转PCB

本文讲述了原理图的编译、原理图转PCB的步骤和易错点。

m0_58083051的博客 3289

易智联LM401模块学习(一)——初识Lora

Lora

weixin_46046597的博客 1054

算法提高 9-3摩尔斯电码(树上搜索)

时间限制:1.0s 内存限制:256.0MB 问题描述   摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用”zylib.h”,只能使用标准库函数。用’ * ‘表示’ . ‘,中间空格用’ | ‘表示,只转化字符表。   摩尔斯码定义见: 提示   清橙进行评测时,输入是以EOF结尾的,而不是换行符。(EOF不是一个字符,“以EOF结尾”

feng_zhiyu的博客 1818

playwright-mcp 安装使用的详细教程

Playwright MCP 快速入门指南 Playwright MCP Server 是由微软开发的浏览器自动化服务,通过 MCP 协议为 AI/Agent/LLM 提供网页交互能力。它基于可访问性树而非屏幕截图,支持多种浏览器和运行模式。 安装要求: Node.js v18+ 命令行操作能力 支持 MCP 的客户端 安装方式: 通过 npx 快速启动:npx @playwright/mcp@latest 项目依赖安装:npm install @playwright/mcp 主要特性: 支持 Chrome

上善若水 7997

二叉树(6)----按层遍历二叉树

1、二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTr

录事参军 3079

实施文档

流程管理 2008-04-23 09:44:00 874 收藏 3 分类专栏: 企业管理杂谈 文章标签: 文档 文档管理 项目管理 工作 配置管理 工具 项目实施文档是用来记录、描述、展示实施过程中一系列信息的处理过程,通过书面或图示的形式对项目活动过程或结果进行描述、定义、规定及报告。例如分阶段实施计划文档,标准业务流程文档,标准编码及数据文档,标准参数设置文档,功能操作指南文档。这些文档将会伴随着ERP实施的各个阶段逐渐充实、完善,也同时记载了整个实施的过程和成果。 作为实施顾问人员,在实施过程

qq_52337172的博客 1062

Open3D 计算点云模型的表面积和体积【2025最新版】

python编程实现 计算点云模型的表面积和体积,博客长期更新,本文最近一次更新时间为:2025年4月4日。

点云侠的博客 13万+

二叉树的销毁(O(1)空间复杂度)

本文主要介绍二叉树的删除。 一、递归 算法思想: 在释放某节点时,该节点的左、右子树都已经释放,所以,应该采用后序遍历。二、非递归 同时要求:不能使用栈,空间复杂度必须为O(1) 算法思想:借助链栈,同时把每个节点的左指针(lchild)看成是链栈中的next指针,然后将后序遍历中需要压入栈的节点原地连成一个链式栈。补充:链式栈简介 (1)栈的链接存储结构称为链栈。 (2)通常链栈用单

小僧Coding 2757

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

摩尔斯电码练习感想

学习摩尔斯电码有一年多了,进度很慢,真是有点伤心。 最开始是用那个Just learn morse code软件来练习的。这个软件使用一个叫Koch的人主张的方法,就是使用一个较高的速度,从两个字符开始练习,每次正确率到了90%就增加一个新的字母,这样直到学会所有的字母。这个方法据说比使用一个很慢的速度,从所有的字符开始练习要效果好。 这个软件我用了好久,越练越感觉有点问题。它练习的时候需要我

ckc的专栏 4488

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

摩斯密码(Morse)——python解密

简介 摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或者艾尔菲德·维尔。 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之间中等的停顿以及句子...

有人_295的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机网络破译密码的题目,密码习题及部分参考答案.doc

一、密码学概述部分:1、什么是密码体制的五元组。五元组(M,C,K,E,D)构成密码体制模型,M代表明文空间;C代表密文空间;K代表密钥空间;E代表加密算法;D 代表解密算法2、简述口令和密码的区别。密码:按特定法则编成,用以对通信双方的信息进行明、密变换的符号。换而言之,密码是隐蔽了真实内容 的符号序列。就是把用公开的、标准的信息编码表示的信息通过一种变换手段,将其变为除通信双方以外其他人所不能...

weixin_29638241的博客 2145

蓝桥杯 算法提高 9-3摩尔斯电码 ADV-226

蓝桥杯 算法提高 9-3摩尔斯电码 ADV-226 问题描述   摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用' * '表示' . ',中间空格用' | '表示,只转化字符表。   摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=2

Tim的嵌入式之旅 853

试题 算法提高 9-3摩尔斯电码

import java.util.Scanner; public class Main { public static char getOneChar(String A) { char result = 0; if(A.equals("*-")) result = 'a'; else if(A.equals(...

lipeitong333的博客 319

ZZNUOJ-2022 摩斯密码

2022 : 摩斯密码 时间限制:1 Sec内存限制:128 MiB 提交:203答案正确:83 提交状态讨论区 题目描述   题目描述:   摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题,去除所有的标点符号。   现在给你一段摩斯密码,请你把它们进行解密。    ...

Alibaba_lhl的博客 2289

算法提高 9-3摩尔斯电码

问题描述   摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用' * '表示' . ',中间空格用' | '表示,只转化字符表。   摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=253988。 提示   清橙进行评测时,输

最有趣的编程 3061
上一篇: 素数环
下一篇: 蓝桥杯2的次幂表示(位运算)
try_fei_ge
博客等级 码龄10年 31粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值