牛客网刷题 (Fibonacci数列)

Fibonacci数列__牛客网

目录

题目描述

输入

输出

题目分析

代码实现


题目描述

输入描述:

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

输出描述:

扫描二维码关注公众号,回复: 13800334 查看本文章
输出一个最小的步数变为Fibonacci数"

示例1

输入

15

输出

2

题目分析

首先我们要对Fibonacci数列非常了解,就是后一个数等于前两个数之和.

我们看的这道题,比如输入 n 为15

 那么最少就是2步

就是用 a 和 b 来记录 n 左右两个数字,然后比较 n 与 a b 两数之差的绝对值,小的那个就是最后的答案

代码实现

#include <stdio.h>
#include <math.h>

int main()
{
	int a = 0;//记录左值
	int b = 1;//记录右值
	int c = a + b;
	int n = 0;
	scanf("%d", &n);
	while (1)
	{
		if (b == n)
		{
			printf("0\n");
			break;
		}
		else if (b > n)
		{
			if (abs(a - n) < abs(b - n))//abs函数是求一个数的绝对值
			{
				printf("%d\n", abs(a - n));
			}
			else
			{
				printf("%d\n", abs(b - n));
			}
			break;
		}
		//求下一组Fibonacci数
		a = b;
		b = c;
		c = a + b;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_54880517/article/details/124129120