取得电话号码的方法


10

鉴于第一个数字的输入,第二个数字(均为正整数,零已排除),确定有多少种方法可以使第二列全国第一,使用以下操作:+1+2*3。简单地从左到右应用操作。

例子:

  1. 输入:1 2。输出:1。即,您只能2这样做+1,所以是一种方法。

  2. 输入:1 3。输出:3。也就是说,你可以得到由要么做3 +2+1+1,或*3

  3. 输入:1 4。输出:4

  4. 输入:2 6。输出:6

  5. 输入:2 7。输出:9

  6. 输入:1 10。输出:84

如果没有办法,例如100 100100 80,输出为0

您也可以将输入作为数组或带有任何方便分隔符的字符串。

最短的解决方案获胜。


看起来可能是骗子,抱歉,是的-没有找到类似的问题。
nicael

4
那么答案应该是无限的输入呢?例如,第一个整数为负的任何输入,因为您可以乘以三,然后再递增回原始数,并根据需要重复多次。
彼得·泰勒

1
@帕特里克:这确实有道理。从-1开始,到0,您可以*3 +2 +1根据需要申请多次,然后申请+1达到
0。– Deusovi

@Peter Fair评论,仅限正数。
nicael

Answers:


1

Pyth- 26 24字节

Pyth中似乎有一个错误,使它以错误的顺序接受输入,但是无论如何都没关系。

/m.vj;+sdzs^Lc3"+1+2*3"S

测试套件

1 10在线超时,但可以在我的计算机上工作)。


这么少超时了吗?嗯
nicael

@nicael是的,我只检查59K种方法10,但是pyth是slooooooow
Maltysen

6

的Javascript ES6,45 44个字节

f=(a,b=B)=>a<(B=b)?f(a+1)+f(a+2)+f(a*3):a==b

示例运行:

f(1,2)  -> 1
f(2,6)  -> 6
f(1 10) -> 84

1
有趣的是使用了默认参数,尽管可以肯定的是,这里并没有保存任何字节。=B(B=)b故意省略)是6个字符,替代方法是将,b3次传递给也是6个字符的递归调用。无论如何,辛苦了。
Patrick Roberts

1

Pyth,29个字节

M?>GH0|qGH+sgLGtBtH?%H3ZgG/H3

在线尝试!

定义一个函数。在链接中添加了三个字节以调用该函数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.