背景
1-2-3-Tribonacci序列
想象一下,您可以通过将标准迭代公式替换为以下内容来制作斐波那契数列:
基本上,不是将最后两个求和以获得下一个,而是将最后三个求和。这是1-2-3-Tribonacci序列的基础。
布朗的准则
布朗的准则状态,您可以将任何整数值表示为序列成员的总和,条件是:
对于所有
n
大于1,
这对挑战意味着什么
您可以将任何正整数描述为由以下初始条件形成的1-2-3-Tribonacci序列的成员之和:
对于此序列中的每个值,这被称为项之间的比率永远不会大于2(该比率的平均值约为1.839)。
如何在此数字表示系统中编写
假设您使用小尾数表示法。像这样排列序列的成员:
1 2 3 6 11 20 37 68
然后,将您要表示的数字表示出来(对于我们的测试,假设是63
),然后找到给定的1-2-3-Tribonacci的值总和为63 (首先使用最大值!)。如果数字是总和的一部分,则在其下放一个1,否则不放0。
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
您可以对任何给定的整数执行此操作-只需先确认您使用低于给定输入的最大值即可!
定义(最终)
编写程序或函数,以给定n
介于1和您的语言最大值之间的正整数输入(以任何标准基数编写)来执行以下操作:
- 将值转换为定义的1-2-3-Tribonacci的数字表示形式。
- 使用这种类似于二进制的表示形式,并像对待二进制一样读取它。这意味着数字保持不变,但是它们的含义改变了。
- 将此二进制数字转换为原始数字的基数。
- 输出或返回此新号码。
但是,只要输出有效,就不需要执行以下步骤。如果您神奇地找到了一些更短的公式(在数学上是等效的),请随时使用。
例子
令函数f
为定义所描述的函数,并[]
表示所采取的步骤(为小端,尽管无关紧要)(您无需遵循此过程,这只是描述的过程):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104