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

F是一个整数的无限序列,对于任何整数i,其都满足Fibonacci条件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)上执行二进制搜索来完成此操作,但是我不明白如何在此处使用二进制搜索。可以给我一个提示或解释简短地讲算法。

===============>>#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次,因此似乎很合理。

  ask by Narek Margaryan translate from so

未解决问题?本站智能推荐: