楼上都是瞎说 这题其实考的是二分搜索hehe~
--------------分割线--------
作为一个后端的nodejs新手 我决定用lua来实现给你看
local MAX = 48 -- 我是渣渣看错2^32 和10^32次了
local MIN = 1
local fib = {}
fib[1] = 1
fib[2] = 1
local i
for i=3, MAX do
fib[i] = fib[i-1] + fib[i-2]
end
function fibFloor(x, max, min)
if max == min+1 then
return fib[min]
else
local mid = math.floor((max+min)/2)
if (fib[mid] > x) then
return fibFloor(x, mid, min)
elseif (fib[mid] == x) then
return fib[mid]
else --if (fib[mid] < x) then
return fibFloor(x, max, mid)
end
end
end
local n = io.read("*num")
for i=1, n do
local x = io.read("*num")
print(fibFloor(x, MAX, MIN))
end
看了楼下答案以后默默把MAX改成48...