您可能听说过斐波那契数。您知道,以开头的整数序列,1, 1
然后每个新数字都是后两个数字的和?
1 1 2 3 5 8 13...
等等。关于斐波那契数的挑战在这里很普遍。但是谁说斐波那契数必须以1, 1
?开头呢?他们为什么不能开始0, 1
呢?好吧,让我们重新定义它们以0开始:
0 1 1 2 3 5 8 13...
但是...我们也不必停在那里!如果我们可以将最后两个数字相加以获得下一个数字,那么我们也可以从第二个数字中减去第一个数字,以添加一个新的数字。因此可以从以下开始1, 0
:
1 0 1 1 2 3 5 8 13...
我们甚至可以得出负面结论:
-1 1 0 1 1 2 3 5 8 13...
这个系列也永远持续下去。我认为有趣的是,它最终反映了正常的斐波纳契数,而其他所有数均变为负数:
13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
我们将此系列称为“扩展斐波纳契数”或EFN。由于实际上没有明显的负数可以开始这个系列,所以我们说0出现在0处,常规斐波那契数扩展到正指数,而负(半负数?)斐波那契数扩展进入负指数,就像这样:
Indices: ...-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
Values: ...13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
这导致了今天的挑战:
给定整数N,返回EFN系列中N出现的每个索引。
关于此任务的一些随机观察:
1在EFN中出现次数比其他任何次数都多:
[-1, 1, 2]
。没有数字出现在超过3个地方。每个大于1的斐波那契数字都会显示一次(3、8、21等)或显示两次(2、5、13等)
规则说明:
- 如果
abs(N)
不是斐波那契数字,则它将永远不会出现在EFN系列中,因此,如果可能,您必须不输出任何内容/如果您的语言无法使用空集合,或者您可以输出一些恒定的非数字值。 - 如果N在EFN中的多个位置出现,则不需要对输出进行排序。尽管每个索引必须恰好出现一次。
- 尽管大多数序列挑战都允许您选择是使用基于1的索引还是基于0的索引,但是此挑战必须使用所描述的索引(0表示0)。
- 您可以通过任何标准格式进行I / O。
测试用例
-13: []
-12: []
-11: []
-10: []
-9: []
-8: [-6]
-7: []
-6: []
-5: []
-4: []
-3: [-4]
-2: []
-1: [-2]
0: 0
1: [-1, 1, 2]
2: [-3, 3]
3: [4]
4: []
5: [-5, 5]
6: []
7: []
8: [6]
9: []
10: []
11: []
12: []
13: [-7, 7]
还有一些更大的测试用例:
89: [-11, 11]
1836311903: [46]
10000: []
-39088169: [-38]
和往常一样,最短的答案以字节为单位!