算法竞赛入门经典(第2版)习题4-6 莫尔斯电码 Morse Mismatches UVa 508

逻辑如下

1.读入每个字母的Morse编码m[40][10]

2.读入词典word[maxn][11]

3.对照字母将词典翻译为Morse编码词典mword[maxn][61],并计算出每个词的编码长度mlen[maxn]

4.读入编码code[maxn][81]同时计算出编码长度clen[maxn]

5.从Morse编码词典中查找相同长度的编码检验其是否能匹配,对通过检验的mword计数,并将第一个精确匹配上的词序号记录

6.如果存在且只有一个mword[n]能够精确匹配则直接输出,如果存在但有多个mword[n]能够精确匹配则输出第一个匹配上的词,后面加上“!”

7.如果不存在则能够精确匹配的mword[n],则递增变量i,对比长度为clen-i的mword[n]的前clen-i个字符或对比长度为clen+i的前clen个字符,发现能够匹配的词就输出并添加后缀“?”


这题前几次提交总是报“runtime error”,把数组反复调大一点后终于wa了。wa了两天,各种修改,甚至把读取数据的方式从getchar改成了scanf,但一直过不去。

只好一边改错一边搜ac的标程,今天终于搜到了(谢谢作者

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
莫尔斯电码是一种用于发送电报的编码方式,它将字母、数字和标点符号转化为不同长度的短、长信号,以便通过电报机传输。Matlab中可以使用以下代码实现莫尔斯电码的编码和解码: ```matlab % 莫尔斯电码编码表 morseCode = struct('A', '.-', 'B', '-...', 'C', '-.-.', 'D', '-..', ... 'E', '.', 'F', '..-.', 'G', '--.', 'H', '....', 'I', '..', ... 'J', '.---', 'K', '-.-', 'L', '.-..', 'M', '--', 'N', '-.', ... 'O', '---', 'P', '.--.', 'Q', '--.-', 'R', '.-.', 'S', '...', ... 'T', '-', 'U', '..-', 'V', '...-', 'W', '.--', 'X', '-..-', ... 'Y', '-.--', 'Z', '--..', '0', '-----', '1', '.----', ... '2', '..---', '3', '...--', '4', '....-', '5', '.....', ... '6', '-....', '7', '--...', '8', '---..', '9', '----.', ... '.', '.-.-.-', ',', '--..--', '?', '..--..', ';', '-.-.-.', ... ':', '---...', '/', '-..-.', '-', '-....-', '(', '-.--.', ... ')', '-.--.-', '_', '..--.-', '"', '.-..-.', '$', '...-..-', ... '@', '.--.-.', '!', '-.-.--'); % 莫尔斯电码编码函数 function morse = encodeMorse(str) morse = ''; for i = 1:length(str) if isfield(morseCode, upper(str(i))) morse = [morse, morseCode.(upper(str(i))), ' ']; else morse = [morse, ' ']; end end end % 莫尔斯电码解码函数 function str = decodeMorse(morse) str = ''; codes = strsplit(morse, ' '); for i = 1:length(codes) if ~isempty(codes{i}) letters = fieldnames(morseCode); for j = 1:length(letters) if strcmpi(morseCode.(letters{j}), codes{i}) str = [str, lower(letters{j})]; break; end end else str = [str, ' ']; end end end ``` 使用示例: ```matlab >> encodeMorse('SOS') ans = ... --- ... >> decodeMorse('... --- ...') ans = sos ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值