暴力破解算法思想(2)

题目:古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在示 大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不 是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止 在数字中出现 0 的概念!罗马数字的表示主要依赖以下几个基本符号:
 
I --> 1

V --> 5

X --> 10

L --> 50

C --> 100

D --> 500

M --> 1000
 
这里,我们只介绍一下 1000 以内的数字的表示法。 单个符号重复多少次,就表示多少倍。最多重复 3 次。
比如:CCC 表示 300  XX 表示 20,但 150 并不用 LLL 表示,这个规则仅适用于 I X C M。
 
如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。 比如:IX 表示 9  IV 表示 4  XL 表示 40  49 = XLIX      更多的示例参见下表,你找到规律了吗?

I = 1

II = 2

III = 3

IV = 4

V = 5

VI = 6

VII = 7

VIII = 8

IX = 9

X = 10

XI = 11

XII = 12

XIII = 13

XIV = 14

XV = 15

XVI = 16

XVII = 17

XVIII = 18

XIX = 19

XX = 20

XXI = 21

XXII = 22

XXIX = 29

XXX = 30

XXXIV = 34

XXXV = 35

XXXIX = 39

XL = 40

L = 50

LI = 51

LV = 55

LX = 60

LXV = 65

LXXX = 80

XC = 90

XCIII = 93

XCV = 95

XCVIII = 98

XCIX = 99

C = 100

CC = 200

CCC = 300

CD = 400

D = 500

DC = 600

DCC = 700

DCCC = 800

CM = 900

CMXCIX = 999
 
本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十 进制表示。
 
输入格式是:第一行是整数 n,表示接下来有 n 个罗马数字(n<100)。以后每行一个 罗马数字。罗马数字大小不超过 999。要求程序输出 n 行,就是罗马数字对应的十 进制数据。
 
例如,用户输入:

3

LXXX

XCIII

DCCII
 
则程序应该输出:

80

93

702

拿到这个题目后,一般的想法可能就是在计算数字的时候去一并考虑小单位在做大单位在右的情形,这样来做就会显得比较混乱,而采用另外一种思路就比较清晰,因为我们这个题目的单位较少,所以我们可以采用枚举法来做这个题目,思路如下:

  1. 先不考虑特殊情况,比如说“IV”,“IX”这样的比较特殊的情况,我们先按照单位对字符串进行求和转化成一个数字。
  2. 第1步求得的结果显然不对,因为我们没有考虑特殊情况,所以第一部实际上对特殊情况的处理与正确的对特殊情况的处理是有差别的,这时候我们比较每种特殊情况的计算差别,然后去掉误差。
  3. 实现核心代码,求得最后结果。

核心代码如下:

package violentCracking;public class enumeration {public static int romeNum(String s ) {int sum=0;;for (int i = 0; i <s.length(); i++) {char c=s.charAt(i);//先不考虑各种特别的情况,遇单位就加if (c=='I')  sum+=1; if (c=='V')  sum+=5;if (c=='X')  sum+=10;if (c=='L')  sum+=50;if (c=='C')  sum+=100;if (c=='D')  sum+=500;if (c=='M')  sum+=1000;}//再考虑特别的情况,将算错的地方修正if (s.indexOf("IV")>=0) sum-=2;//本来应该是4,上面算成了6if (s.indexOf("IX")>=0) sum-=2;//本来应该是9,上面算成了11if (s.indexOf("XL")>=0) sum-=20;//本来应该是40,上面算成了60if (s.indexOf("XC")>=0) sum-=20;//本来应该是90,上面算成了110if (s.indexOf("CD")>=0) sum-=200;//本来应该是400,上面算成了600if (s.indexOf("CM")>=0) sum-=200;//本来应该是900,上面算成了1100return   sum;}public static void main(String[] args) {System.out.println(romeNum("MCCCXIV"));}}

验证结果是:

1314

以上是自己学习时候的简单整理分享,如有不对或者错误的地方,希望各位大佬指正,相互学习,谢谢。

暴力破解算法思想(2)相关推荐

  1. 忘记密码?不存在的, 教你如何使用python 暴力破解

    " 教你如何使用暴力破解" 本文续上一期压缩文件,这期,我们来讨论一下如何在不知道密码的情况下进行暴力破解. 上期回顾:如何实现压缩文件通过python解密 01- 准备材料 这期 ...

  2. 蜜蜂采蜜最短路径(华为机考反思)(暴力破解)

    大概题目:蜂巢在坐标(0,0)的位置,有五处花丛,蜜蜂从蜂巢出发,要把五处花丛的花蜜采完再回到蜂巢,最短距离是多少.输入说明:一行输入,10个数分别是五处花丛的坐标(x1,y1,x2,y2,x3,y3 ...

  3. 机器学习中的特征建模(特征工程)和算法选型建模 - 以暴力破解识别为例

    catalogue 1. 特征工程是什么?有什么作用? 2. 特征获取方案 - 如何获取这些特征? 3. 特征观察 - 运用各种统计工具.图标等工具帮助我们从直观和精确层面认识特征中的概率分布 4. ...

  4. 蓝桥杯算法特训 | C++ | 暴力破解与实用性优先

    课程主要内容 暴力破解与实用性优先 (1)暴力破解在大赛及企业应用中的重要性 (2)暴力破解中的实用性原则 (3)逆向解法 (4)枚举法 关键词:枚举(情况少的时候).逆向解法(逆算).试探观察(试解 ...

  5. DVWA学习(三)Brute Force(暴力破解)

    BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相 ...

  6. 如何面对高水平的破解组织 谈暴力破解应对

    如何面对高水平的破解组织 谈暴力破解应对 2005-05-09, 11:18 sanit 共享软件是目前世界上软件业比较热门的话题,国内更是如此.成千上万的中国程序员以极大的热情投入到这个领域来,都憧 ...

  7. 黑客开始利用云计算暴力破解密码

    本文讲的是黑客开始利用云计算暴力破解密码[IT168 云计算频道]使用云计算服务来替代在公司里设立维护大量服务器,显然对节省企业的成本有利.不过现在看来从云计算服务中受惠最大的恐怕是黑客等群体,黑客们 ...

  8. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  9. OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)

    目录 基本概念 代码与实例 打包下载 基本概念 分析一个程序,用什么API函数作为切入点十分关键. 设置OllyDbg中断在程序的入口: System breakpoint:系统断点,OllyDbg用 ...

最新文章

  1. 最大子段和问题分析和总结
  2. 【以太坊智能合约】Embark Framework 开发基础篇
  3. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所
  4. Caffe2:ubuntu修改链接方式ln
  5. java编译找不到符号_关于久违的Javac,编译出现“找不到符号”
  6. sp烘焙流程_小手雷-PBR材质流程(一)——(基本材质)
  7. SQL服务器引擎---协议
  8. 超400万用户的Chrome截图插件下架始末
  9. mysql 数据库dbhelp_策略模式实现支持多种类数据库的DBHelp
  10. [转载] Python中对 Excel 的相关详细操作(读取、写入、指定行、指定列、新增sheet工作表)
  11. 26.Yii 模块(2)
  12. Adobe(Pr Ae)动态图形模板
  13. 利用oc门或od门实现线与_TTL,CMOS,OC门,OD门的理解
  14. VUE PDF上传预览下载(vue-pdf)
  15. 录制Gif动画的软件-ScreenToGif
  16. 算法之美 - 电子书下载(高清版PDF格式+EPUB格式)
  17. 无线键盘RK61使用说明
  18. UE4 Gameplay
  19. How to deal with interlaced video
  20. 程序基石系列之C++多态的前提条件

热门文章

  1. 芯片破壁者(十四):硅谷“摩西”肖克利和他的半导体实验室
  2. 高驰涛——裸奔到北京的程序猿
  3. 2022年PMP认证6月考试,保证通过,拿到PMP认证就能月入5万
  4. Axure8.0教程:动态面板多级联动
  5. 消息称高通骁龙 895 样品性能提升可达 20%
  6. Typora快捷键:
  7. 拉格朗日松弛(一)——理论及算法
  8. 港股第四家“造车新势力“,零跑汽车通过IPO聆讯
  9. 2023全新SF授权系统源码 V3.7全开源无加密版本,亲测可用
  10. 找壁纸不用愁了:壁纸网站/APP/工具合集