题目描述:
Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一 个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。
输入描述:
输入为一个正整数N(1 ≤ N ≤ 1,000,000)
输出描述:
输出一个最小的步数变为Fibonacci数
示例:
输入
15
输出
2
分析:
从第0项开始算斐波那契数,直到第num项的斐波那契数大于等于输入的这个数,把这一项的斐波那契数用X记录下来,再算第i-1项的斐波那契数用y记录,比较x-n和n-y,把最小的数输出出去。
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = 0;
int num =0;
while(num >= 0){
if(Fibonacci(num) >= n){
x = Fibonacci(num);
break;
}
num++;
}
int y = Fibonacci(num-1);
int result = (x-n)>(n-y)?(n-y):(x-n);
System.out.println(result);
}
public static int Fibonacci(int n){
if(n<=1){
return n;
}
if(n==2){
return 1;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
}