Fibonacci数列是这样定义的:F[0]=0,F[1]=1
i>=2,F[i]=F[i-1]+F[i-2]
因此,Fibonacci数列就形如:0,1,1,2,3,5,8,13,21…
给你一个N,你想让其变成一个Fibonacci数,每一步你可以把当前数X变为X-1或者X+1
现给你一个数N,求最少多少步可以变成Fibonacci数
输入描述:输入为一个正整数(1<=N<=1,000,000)
输出描述:输出一个变为Fibonacci数的最小步数
eg:输入15,输出2
public static void main(String[] args) {//通过
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
//可以边生成斐波那契数,边判断n
//n一定是在某两个个斐波那契数中间(包含边界)
int x=0;//表示F[i-2]
int y=1;//表示F[i-1]
int z=1;//表示F[i]
while(true){
if(n==z){//n范围[1,1000000]
System.out.println(0);
return;
}
if(n>z){
z=y+z;
int tmp=y;
y=x+y;
x=tmp;
}
if(n<z){
System.out.println((n-y)<(z-n)?n-y:z-n);
return;
}
}
}