首页 > 试题广场 >

计算斐波那契数最小差值

[编程题]计算斐波那契数最小差值
  • 热度指数:2899 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个整数 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

数据范围:输入的数满足





输入描述:
输入任意整数


输出描述:
一个整数
示例1

输入

15

输出

2

说明

15与“0,1,1,2,3,5,8,13,21。。。。”当中的13差值的绝对值最小,与21的差值为6,与8的差值为7  
示例2

输入

1

输出

0

说明

斐波那契数列中存在 1 ,因此最小差值是 0  
#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int a = 0;
        int b = 1;
        int c = a+b;
        while(1) {
            if(n == b) {
                printf("%d\n", 0);
                break;
            } else if( n < b) {
                if(abs(a-n) < abs(b-n)) {
                    printf("%d\n", abs(a-n));
                    break;
                } else {
                    printf("%d\n", abs(b-n));
                    break;
                }
            }
            a = b;
            b = c;
            c = a + b;
        }
    }
    return 0;
}
发表于 2023-01-21 16:37:28 回复(0)