背景
该图向我们展示了250以下的最长罗马数字表达式是188,需要9个数字来表示。
挑战
用于表达最罗马数字的标准符号如下:{ I
,V
,X
,L
,C
,D
,M
},其中人物的数值是M
= 1000,D
= 500,C
= 100,L
= 50,X
= 10,V
= 5,I
= 1。
在此挑战中,您的目标是给定正整数n,计算可通过串联n个标准符号组成的有效罗马数字表示形式的数量。
然后,您的程序必须输出该计算的结果!
输入:正整数n。
输出:长度为n的有效罗马数字表达式的数量。
罗马数字表达规则
罗马数字最初只具有“加法”配对,这意味着数字始终按降序书写,并且所有数字的值之和就是数字的值。
后来,减法配对(为了减少大数字中的较小数字而使用)将较小的数字放置在较大的数字前面,从而缩短了罗马数字表达。减法对不能链接,如以下无效表达式中所示:IXL
。
以下是加减配对的现代规则。
- 在减法对中,只有I,X和C可以用作前导数字。
- 我只能在减法对中放在V或X之前。
- X只能在减法对中放在L或C之前。
- 在减法对中,C只能放在D或M之前。
- 除减法对之外,数字必须按降序排列(这意味着如果您删除每个减法对的前导数字,则数字将按降序排列)。
- 较小的面额不能等于或超过M,C和X。
- D,L和V只能出现一次。
- 仅M可以重复4次或更多次。
进一步说明
我们将不会使用条形符号;相反,我们将简单地添加更多M来表示任何数字。
这些是我们罗马数字遵循的唯一规则。这意味着诸如的奇数表达式
IVI
在我们的系统中也将被视为有效。还要记住,我们不计算长度为n的表达式的数目,因为有些数字具有多个表达式。相反,我们只计算有效表达式的数量。
测试用例
1
→ 7
2
→ 31
3
→ 105
我手动检查了以上内容,因此请确保仔细检查测试用例,并尽可能添加更多内容!
获奖标准
这是一个高尔夫挑战赛,请尽情享受!我将只接受至少可处理1到9输入的解决方案。再多就是奖励!
编辑
根据评论者的要求,在下面或在此pastebin链接中,我算出n = 3 的105个连击
III IVI IXI IXV IXX VII XII XIV XIX XVI XXI XXV XXX XLI XLV XLX XCI XCV XCX XCL XCC XCC LII LIV LIX LVI LXI LXV LXX CII CIV CIX CVI CXI CXV CXX CXL CXC CLI CLV CLX CCI CCV CCX CCL CD CMI CMV CMX CML CMC CMD CMM DII DIV DIX DVI DXI DXV DXX DXL DXC DLI DLV DLX DCI DCV DCX DCL DCC MII MIV MIX MVI MXI MXV MXX MXV MXX MXL MXC MLI MLV MLX MCI MCV MCX MCL MCC MCD MCM MDI MDV MMX MML MMC MMD MMM
编辑2:
根据Jonathan Allan提供的代码,使用以下非高尔夫代码来检查结果。
编辑3:
对于此挑战中的所有错误,我深表歉意。下次我一定会做得更好!