网易校招真题 一个数变为斐波那契数列数
Posted thomas-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易校招真题 一个数变为斐波那契数列数相关的知识,希望对你有一定的参考价值。
题目描述
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数。
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数"
解题思路:找出一个最小的大于输入的N的斐波那契数,并在找的同时保存前一个斐波那契数。最后通过与N作差求出两者中最小的那个差数。
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String args[]){ 5 Scanner input = new Scanner(System.in); 6 int n = input.nextInt(); 7 int a = 0 , b = 1; //斐波那契数列F[0],F[1] 8 while(b < n){ //判断斐波那契数是否大于N 9 int temp = a + b; 10 a = b; //保存前一个斐波那契数 11 b = temp; 12 } 13 System.out.println(Math.min(n-a,b-n)); 14 } 15 }
以上是关于网易校招真题 一个数变为斐波那契数列数的主要内容,如果未能解决你的问题,请参考以下文章