找出最小差
给出一个整型数字,求出这个数字与斐波那契数列中各项元素的最小差值(差值为绝对值)
示例:
输入:15
输出:2
理由:
菲波那切数列第一个元素默认为0,第二个元素默认为1,则后面的元素都为前两项元素之和:
0 1 1 2 3 5 8 13 21 …… 以此类推
在斐波那契各项元素 和15的做差分别为:
15 14 14 13 10 7 2 6 …… 以此类推
其中和13的差值最小为2,所以输出的整型值为2
代码演示
#include <iostream>
using namespace std;
class Function
{
public:
int diff(int n)
{
if (n == 0)
{
return 0;
}
int i = 0, j = 1, sum = 1;
while (sum < n)
{
i = j;
j = sum;
sum = i + j;
}
int min_left = n - j;
int min_rigth = sum - n;
int min = min_left < min_rigth ? min_left : min_rigth;
return min;
}
};