Fibonacci数列

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,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数"
示例1

输入

15

输出

2
import java.util.ArrayList;
import java.util.Scanner;

public class M1 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int a=0;
		int b=1;
		int c=0;
		ArrayList<Integer> m=new ArrayList<Integer>();
		m.add(a);
		m.add(b);
		while (c<=1000000) {
			c=a+b;
			a=b;
			b=c;
			if (c<=1000000) {
				m.add(c);
			}			
		}
		int l=m.size();
		int s1=0;
		int s2=0;
		for (int i = 0; i < l; i++) {
			if (m.get(i)<n&&m.get(i+1)>=n) {
				s1=Math.abs(m.get(i)-n);
				s2=m.get(i+1)-n;				
			}
		}
		if (s1>s2) {
			System.out.println(s2);			
		}else {
			System.out.println(s1);
		}
		
		
	}
}

猜你喜欢

转载自www.cnblogs.com/52circle/p/9023647.html