0

我正在尝试解决以下问题:

F 是整数的无限序列,对于任何整数 i 都满足斐波那契条件 F(i + 2) = F(i + 1) + F(i)。编写一个程序,根据给定的 F(i) 和 F(j) 值计算 F(n) 的值。

输入:输入包含按以下顺序排列的五个整数:i、F(i)、j、F(j)、n。-1000 ≤ i, j, n ≤ 1000, i ≠ j, -2·10^9 ≤ F(k) ≤ 2·10^9 (k = min(i, j, n), ..., max(i, j, n))。

输出:输出由一个整数组成,即 F(n) 的值。

我试图通过找到 F(min(i,j)+1) 然后使用这两个邻居来找到 F(n) 来解决这个问题。有人告诉我这可以通过在区间 (-2*10^9,2*10^9) 上实现二进制搜索来完成,但我不明白如何在这里使用二进制搜索。可以给我一个提示或解释算法简略。

4

1 回答 1

1

我能想到的一种方法是这样的:假设 i < j 和 F(i) < F(j) 所以我们想要找到 F(i+1)。我们知道 F(i) < F(i+1) < F(j) 所以我们可以在 [F(i),F(j)] 之间进行二分搜索 - 每次我们猜测 F(i+1) 并检查如果它合适(我认为没有简单的方法),直到你得到正确的值。

复杂性 - 每次迭代可能需要 2000 步(最坏的情况),最坏的情况是 log(4*10^9) 迭代,大约是 32,所以这似乎是合理的。

于 2013-04-17T22:18:35.403 回答