今天在做一个算法题的时候,遇到了一个奇怪的bug,在这里记录一下,这个bug由这个算法题引入。
题目描述:
给定一个数,求这个数和上一个或者下一个斐波那契数列中数的距离。
例如:输入10,10的上一个斐波那契数是8,下一个斐波那契数是13,由于10和8离的最近,所以输出的距离就是2
input:
10
ouput:
2
格式要求:
- 输入一个数,数的范围(1~1000000)
- 输出一个整数
思路:
根据输入要求的范围,先求出前面一些项的斐波那契数保存在一个表中,保证输入的数字一定在这个表存储的斐波那契数范围内。用输入的数 n 遍历这个表,找到第一个大于n的项,然后比较n和当前项的距离与和上一项的距离,返回较小的那个即可。
代码实现:
#include <iostream>
using namespace std;
int fib_table[36];
void init_table(){
fib_table[0] = 0;
fib_table[1] = 1;
int i = 2;
for (int i = 2; i != 36; ++i){
fib_table[i] = fib_table