给定一个正整数n,计算n与斐波那契数的最小差值(绝对值)
说明:
斐波那契数定义:
从0,1开始后面的数值为前面两者之和, 即第三个数为第一和第二个数之和
形如:0,1,1,2,3,5,8,13,21。。。。 其中3为1与2的和,5为2与3的和,8为3与5的和等等
要计算的数值案例:
输入15,与斐波那契数相减,与13相减的绝对值是2,与21相减的绝对值是6,与众多斐波那契数相减的最小差值为2
因此输入15,输出2
输入描述:n为正整数
输出描述:正整数
解题思路:1、创造2个相邻斐波那契数,与n作差
2.比较左右两个差的大小,取最小值
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
int fb0 = 0, fb1 = 1;
int left, right, n;
cin >> n;
while(1){
int temp;
if(n <= fb1){
left = n - fb0;
right = fb1 - n;
break;
}
temp = fb0 + fb1;
fb0 = fb1;
fb1 = temp;
}
cout << min(left, right) << endl;
return 0;
}