import java.util.Scanner; public class Main { static long[] f = new long[105]; static void binarySearch(long x) { int l = 1, r = f.length - 3; int mid = 0; while (l <= r) { mid = l + (r - l) / 2; if (f[mid] >= x) { r = mid - 1; } else { l = mid + 1; } } //比较|f[mid] - x|,|f[mid - 1] - x|,f[mid + 1] - x|哪个最小 long a = Math.abs(f[mid] - x); long b = Math.abs(f[mid + 1] - x); long c = Math.abs(f[mid - 1] - x); if (a > b) { //看b,c if (b > c) { System.out.println(mid - 1); } else { System.out.println(mid + 1); } } else { //看a,c if (a > c) { System.out.println(mid - 1); } else { System.out.println(mid); } } } public static void main(String[] args) { Scanner in = new Scanner(System.in); f[1] = 1; f[2] = 1; int n = 85; for (int i = 3; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } int t = in.nextInt(); while (t-- > 0) { long a = in.nextLong(); binarySearch(a); } } }
全部评论
(1) 回帖