O(1)斐波那契求逆

计算斐波那契数最小差值

http://www.nowcoder.com/questionTerminal/743de16bf29041b7b423609628a1fa8c

O(1)通项公式解法:

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        double x = sc.nextDouble();
        double a = Math.sqrt(5.0);
        double temp1 = (1.0 + a)/2.0;
        double temp2 = (1.0 - a)/2.0;
        double r = Math.log(x*a)/Math.log(temp1);//利用通项公式求这是第几项,忽略较小幂
        int res = (int)Math.round(r);
        int k = (int)(1.0/a*(Math.pow(temp1, res) - Math.pow(temp2, res)));
        System.out.println((int)Math.abs(x - k));
    }
}
全部评论
考虑到通项公式是个凹函数,这里的约数解法并不正确,只是题目的测试用例太少,没查出来这种解法的问题而已。正解在这里:https://blog.nowcoder.net/n/11f939e1b51b48e195c5c9f777e0585e
点赞
送花
回复
分享
发布于 2020-07-25 18:42

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务