目錄
- 一.題目
- 二.思路
- 三.代碼實作
一.題目
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大的斐波那契數時(所以,需要和f2進行比較), 此時離n最近的 兩個斐波那契數為最新生成的兩個斐波那契數,測驗它們,回傳與n之間的最小距離
三.代碼實作
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int f1 = 0;
int f2 = 1;
int f3 = 0;
while (f2 < n) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
//將 f2-n 的絕對值 和 f1-n 的絕對值進行比較,比較出哪個離n最近
if (Math.abs(f2 - n) > Math.abs(f1 - n)) {
System.out.println(Math.abs(f1 - n));
} else {
System.out.println(Math.abs(f2 - n));
}
}
}
鏈接:https://www.nowcoder.com/questionTerminal/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?pos=11&orderByHotValue=1
來源:牛客網
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279975.html
標籤:java
