文章标题

来源:互联网 发布:网络销售入门 编辑:程序博客网 时间:2024/06/05 01:02

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:
输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述:
输出一个最小的步数变为Fibonacci数

示例1
输入
15

输出
2

#include <stdio.h>#include <math.h>#include <stdlib.h>int main(){    long a = 0, b = 1, c, n, step;    scanf_s("%ld", &n);    while (1){        c = a;        a = b + a;        if (abs(a - n) <= c) {            step = abs(a - n);            break;        }        c = b;        b = a + b;        if (abs(b - n) <= c) {            step = abs(b - n);            break;        }    }    printf("%d", step);    system("pause");}

您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为70.00%

测试用例:
3417

对应输出应该为:

764

你的输出为:

833

#include <stdio.h>#include <stdlib.h>int main(){    long n;    scanf("%ld", &n);    int a = 1, b = 1, tag = 0, cc = 0, cc_last = 0, step;    if (abs(a - n) <= b) step = abs(a - n);    else if (abs(a + b - n) <= b) step = abs(a + b - n);    else{        a = a + b;        cc_last = cc;        cc = abs(a - n);        while (1){            b = a + b;            cc_last = cc;            cc = abs(b - n);            if (cc_last <= cc) {                step = cc_last;                break;            }            a = a + b;            cc_last = cc;            cc = abs(a - n);            if (cc_last <= cc) {                step = cc_last;                break;            }        }    }    printf("%d", step);    system("pause");}

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

先码再研究

链接:
https://www.nowcoder.com/questionTerminal/18ecd0ecf5ef4fe9ba3f17f8d00d2d66
来源:牛客网

原创粉丝点击