C语言(40)Fibonacci数列

原创 2018年04月17日 08:53:09

题目描述

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 <strings.h>

void fib(int []);
int buffer[3]={0};

int func(int n)
{
	bzero(buffer, sizeof(buffer));
	buffer[0] = n;
	fib(buffer);
	if((buffer[1]-n)>(n-buffer[2])){
		return (n-buffer[2]);
	}else{
		return (buffer[1]-n);
	}

}

void fib(int buffer[])
{
	int x=0, y=1, z=0;

	while(y<buffer[0]){
		z = x + y;
		x = y;
		y = z;
	}

	buffer[1] = y;
	buffer[2] = x;
}


int main(int argc, char **argv)
{
	int n;
	scanf("%d", &n);	
	printf("%d\n", func(n));

	return 0;
}







版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_36288184/article/details/79969435
收藏助手
不良信息举报
您举报文章:C语言(40)Fibonacci数列
举报原因:
原因补充:

(最多只允许输入30个字)