1、 题目
题目大意是:给定一个数n,计算n与斐波那契数的最小差值。
2、举例
【输入】一个正整数n
【输出】n与斐波那契数的最小差值
如:
【输入】15
【输出】2
3、 我的思路
找出第一个大于n个斐波那契数m1以及其前一个斐波那契m2,然后计算(m1-n)与(n-m2),其中较小的差值即为结果。
4、 我的实现
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int input = in.nextInt();
System.out.println(calMinStep(input));
}
}
//计算与斐波那契数的最小差值
private static int calMinStep(int input)
{
int a = 1;
int b = 1;
int c = 2;
if(input == 1 || input == 2)
{
return 0;
}
while(true)
{
if(c >= input)
{
break;
}
int temp = b + c;
a = b;
b = c;
c = temp;
}
int before = input - b;
int after = c - input;
return before < after ? before : after;
}
}
5、 总结
这题还是比较容易,当然我有比我的更好的实现方式,所以在这里抛砖引玉,望各位大神不吝赐教,不胜感激!