无障碍 关怀版
评论

【每周一坑】罗马数字转换

罗马数字是欧洲在阿拉伯数字传入之前使用的一种数码,现在的使用已经非常少了,大概偶尔会在钟表、文章中的标号等地方还能见到。

罗马数字采用七个罗马字母作数字、即 I(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。它有一套不同于阿拉伯数字的写法规则,简单来说可以总结为:

  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;

  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;

  3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;

  4. 在一个数的上面画一条横线,表示这个数增值 1,000 倍。

那么今天,我们就来尝试写个罗马数字和阿拉伯数字的转换器吧:

给定一个小于 3999 的罗马数,将其转换为整数,例如:Ⅲ=3、Ⅳ=4、Ⅵ=6、XIX=19、XX=20、XLV=45、MCMLXXX=1980。

附加题:

给定一个小于 3999 整数,将其转换为罗马数。

示例:

defromanToInt(s):# your code herereturni

assertromanToInt( 'III') == 3

assertromanToInt( 'IV') == 4

assertromanToInt( 'VI') == 6

assertromanToInt( 'XIX') == 19

assertromanToInt( 'XLV') == 45

assertromanToInt( 'MCMLXXX') == 1980

assertromanToInt( 'CMXCIX') == 999

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。

【解答】螺旋矩阵

解题思路:

  1. 由图可知,螺旋数组中的数字运动方向依次 右 -> 下 -> 左 -> 上 -> 右 这样的循环,在合适的条件下变换累加方向即可。

  2. 变换方向的条件有两个,一是遇到数组边界,二是下一位置被其他数占据。

  3. 可用一个二维列表存储数据,按照规则将列表中填上数字,最后再输出。

示例代码:

classSpiral:def__init__(self, N):# 构造一个二维数组self.matrix = [[ Nonefori inrange(N)] forj inrange(N)]

# 起始行列数self.row = 0self.col = 0# 数组的边界值self.max_row = N

# 更换方向的标记self.mark = 0# 按需取出数组运动方向defderection(self, mark):around = [ [self.row, self.col+ 1], # 向右[self.row+ 1, self.col], # 向下[self.row, self.col- 1], # 向左[self.row- 1, self.col] # 向上]

returnaround[mark% 4]

# 针对目前位置,获取下一位置的行列数# 下一位置为边界则更换方向# 下一位置已经有元素则更换方向defnext(self):# 下一位置i = self.derection(mark=self.mark)

# 判断是否更换方向,不更换则更新 self.row / self.colif- 1notini andself.max_row notini:

ifself.matrix[i[ 0]][i[ 1]] isNone: self.row,self.col = i

returnNone# 更换方向self.mark += 1returnself.next()

defsolution(self):# 逐一取出 1 到 n^2 值fori inrange( 1,self.max_row** 2+ 1):

# 按行列赋值self.matrix[self.row][self.col] = i

# 退出条件ifi == self.max_row** 2:

break# 更新行列值self.next()

# 打印结果forr inself.matrix:

forc inr: print( '{0:^{1}}'.format(c,self.max_row), end= ' ') print( 'n')

if__name__ == '__main__': n = int(input( '>>>')) s = Spiral(n) s.solution()

@wuxiaojiao 同学的代提交答案中最简洁的

http://paste.ubuntu.com/24955910/

@徐大龙 同学的代码使用了 numpy 库

https://github.com/PeytonXu/learn-python/blob/master/cases/helix_matrix/helix_matrix.py

『码上行动』在线学习班正在开放中,详情请回复 码上行动 查看

欢迎加入

Crossin的编程教室

crossincode.com

读者交流QQ群:149164011

微信请加 crossin11 留言入群(新手/进阶)

请把我们分享给身边爱学习的小伙伴 :) 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
推荐阅读

PHP网站源码坂田百度爱采购罗湖网络广告推广惠州关键词按天计费爱联外贸网站建设大运关键词按天扣费丹竹头网站seo优化盐田网站设计模板大鹏网站搭建南联企业网站改版民治外贸网站建设福田百度竞价盐田网站改版坑梓企业网站制作丹竹头百姓网标王同乐网站推广方案塘坑标王福田关键词按天计费荷坳模板制作福永SEO按天扣费松岗优化塘坑网络营销松岗网站改版永湖百度标王吉祥网站推广方案坪地网站推广系统布吉企业网站改版大芬SEO按天扣费南联网站优化按天收费盐田seo坂田网站制作歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化