原题链接:https://vjudge.net/problem/UVA-508
分类:函数
备注:阅读理解,中级模拟
前言:能成功主要还是感谢一篇博客:https://blog.csdn.net/mrcrack/article/details/53048026。因为不想用C++的东西,好不容易才找到一篇C的,这有点久远的东西了,而且描述的意思并没有很清楚,有点乱,但是看了他怎么处理翻译摩尔斯电码的代码,终于让我搞出来了…

分析

  其实每一步都挺好操作的,主要还是要理解好题目意思。先把摩尔斯电码以及context的单词存下来,并且直接把单词翻译出的电码也存下来以用于后续比较。
  主要还是精准匹配,模糊匹配的问题。我不知道其它的正确方式,但是我AC的代码中,精准匹配只有一个则直接输出,精准匹配有多个输出则输出第一个再加感叹号。如果是模糊匹配则输出第一个再加问号。可能既没有精准匹配也没有模糊匹配。设题目给的摩尔斯电码和用来比较的context中的单词翻译成的电码中更小的长度为len,则从第一个字符到第len个字符都应该是相等才是模糊匹配,否则不匹配。如果完全没匹配的输出context中的第一个。
  并没有按字典序排序,而是直接用的context的单词顺序。

代码如下:

#include<stdio.h>
#include<string.h>
const int inf = 0x3f3f3f3f;
int cnt;struct str
{char code[20] = { 0 };//不超过6个
}c[256];struct  context
{int len;char word[20] = { 0 };//不超过10个char decode[105] = { 0 };//不超过80个context() { len = 0; }
}wd[110];//不超过100个char read()
{char ch = getchar();while (ch == ' ' || ch == '\n')ch = getchar();return ch;
}void In_code()//存Morse码
{while (1){char x = read();if (x == '*')break;scanf("%s", c[x].code);}
}void In_word()//存单词
{while (1){scanf("%s", wd[cnt].word);if (wd[cnt].word[0] == '*')break;int chang = strlen(wd[cnt].word), xb = 0;for (int i = 0; i < chang; i++)for (int j = 0; c[wd[cnt].word[i]].code[j] != NULL; j++)wd[cnt].decode[xb++] = c[wd[cnt].word[i]].code[j];wd[cnt++].len = xb;}
}void translate()//翻译
{while (1){char mor[105] = { 0 };scanf("%s", mor);if (mor[0] == '*')break;int ans = 0, num = 0, chang = strlen(mor);for (int i = 0; i < cnt; i++)if (chang == wd[i].len)if (strcmp(wd[i].decode, mor) == 0){num++;if (num == 2)break;ans = i;}if (num)//精确匹配{printf("%s", wd[ans].word);if (num == 2)printf("!");printf("\n");continue;}int len = inf, cha, common;//模糊匹配for (int i = 0; i < cnt; i++){for (common = 0; common < chang && common < wd[i].len; common++)if (wd[i].decode[common] != mor[common]) break;if (common == chang)cha = wd[i].len - chang;else if (common == wd[i].len)cha = chang - wd[i].len;else cha = inf;//完全不匹配if (cha < len) {len = cha; ans = i;  }           }printf("%s?\n", wd[ans].word);}
}int main(void)
{In_code();In_word();translate();return 0;
}

习题4-6 莫尔斯代码(Morse Mismatches,ACM/ICPC World Finals 1997,UVa508)相关推荐

  1. uva508 莫尔斯电码(Morse Mismatches)

    首先我理解错了题意,在这篇文章找到了UVa 508 Morse Mismatches(莫尔斯电码) 这题的意思是给定一些莫尔斯编码,给定一些已知字典,给定一些编码,求解这些编码的对应原文,如果可以精确 ...

  2. 《算法竞赛入门经典》习题4-2 正方形 (Squares,ACM,ICPC World Finals 1990,UVa201)——仅提供大体方法

    原题及翻译 A children's board game consists of a square array of dots that contains lines connecting some ...

  3. UVa1600 习题6-5 巡逻机器人 (Patrol Robot,ACM/ICPC Hanoi 2006)

    原题链接: UVa-1600 题目大意: 模拟机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍, ...

  4. 习题7-1 消防车(Firetruck,ACM/ICPC World Finals 1991, UVa208)

    原题链接:https://vjudge.net/problem/UVA-208 备注:回溯法 分类:DFS 代码如下: #include<cstdio> #include<cstri ...

  5. 算法竞赛入门竞赛 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

    给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分 别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol).例如,C6 ...

  6. 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)

    前n(n≤10000)个整数顺次写在一起:123456789101112-数一数0-9各出现多少次 (输出10个整数,分别是0,1,-,9出现的次数). 原题链接:https://vjudge.net ...

  7. 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)

    原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...

  8. 习题8-14 商队抢劫者(Caravan Robbers, ACM/ICPC SEERC 2005, UVa1616)

    原题链接:https://vjudge.net/problem/UVA-1609 分类:二分法 备注:精度问题,技巧 #include<bits/stdc++.h> using names ...

  9. 习题6_5 巡逻机器人(Patrol Robot, ACM/ICPC Hanoi 2006, UVa1600)

    越障可以拐弯,一个障碍可能被不同路线所经过,所以普通的dfs不行,再加一个维度step,表示走到此结点越过的障碍数 #include<cstdio> #include<cstring ...

  10. 习题 7-12 移动小球(Moving Pegs, ACM/ICPC Taejon 2000, UVa1533)

    原题链接:https://vjudge.net/problem/UVA-1533 分类:状态压缩 备注:模拟,BFS水题 感觉这个题没有什么做的价值-前一题做了就够了. 注意几个比较隐晦的细节,每一步 ...

最新文章

  1. html扩展名用于保存清单文件,HTML5 manifest ApplicationCache
  2. 两位智源青年科学家榜上有名!2020青橙奖公布
  3. ASP.NET Core IHostEnvironment和IApplicationLifetime介绍
  4. 关于 Repeater 控件嵌套的使用。在嵌套中添加 其它控件(如:按钮),并影响其它控件的方法,很重要哦,测试通过。...
  5. jQuery事件整合
  6. ASP.NET使用Memcached高缓存实例(初级教程)
  7. 计算机专业的第二批本科大学,第二批本科院校
  8. 使用jQuery时报错:$未被定义
  9. docker运行dubbo-admin
  10. win10怎么设置默认输入法_电脑输入法怎么设置成搜狗双拼?
  11. 投资、理财、炒股记事
  12. 【Django 2021年最新版教程31】Jmeter安装 如何并发测试
  13. 深海迷航坐标传送代码_深海迷航代码输入方法
  14. ESP8266-Arduino编程实例-SHT40温湿度传感器驱动
  15. Jarvis_Web 刷题记录_Bellone北洛
  16. Android 性能优化四个方面总结
  17. 北京哪些医院不用特意选择就可用社保卡直接就医?
  18. Mockito中@Mock与@InjectMock
  19. 芯片上电休眠或者JTAG禁用后怎么下载程序
  20. 免费获取论文的网站,获取免费国外书籍的网站,SCI-Hub科研论文全文下载可用网址

热门文章

  1. iOS 超好用的本地视频播放器推荐!
  2. 亚马逊 kindle 刷机 过程记录
  3. 通过python获取浏览器cookie
  4. 50Ω阻抗问题详解及射频电路设计中的阻抗匹配
  5. 图片节点html,Qunee for HTML5 - 中文 : 节点图片
  6. 【无标题】对Unity的Windows项目进行dll反编译修改
  7. yalmip-cplex学习总结+亲测算例(一)
  8. CentOS7.5 怎么修改默认SSH端口号
  9. 初识STM32之选型
  10. Linux_版简易C语言IDE制作