先简单给大家科普一下:
斐波那契数列(兔子数列),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
在数学上,斐波纳契数列以如下被以递归的方法定义:F1=1,F2=1,Fn从第3位开始的公式:Fn=F(n-1)+F(n-2)
C++代码实现是这样的:
#include <bits/stdc++.h>
using namespace std;
long long n,a[10005];
int main(){
cin>>n;
a[1]=0;
a[2]=1;
for (int i=3;i<=n;i++)//注意从第3位开始
a[i]=a[i-1]+a[i-2];
cout<<a[n];//最后输出第n位
return 0;
}
接着就看题目:
斐波那契数列是非常出名的数列,它的公式是这样的:
1、 f[0] = 0;
2、 f[1] = 1;
3、 对于任意i>=2,都有f[i] = f[i-1] + f[i-2]。
于是,产生的斐波那契数列就是:0,1,1,2,3,5,8,13,21,34,......
现在给出一个正整数N,你要找出一个最小的整数X,同时满足如下两个条件:
1、 X >= 0。
2、 N+X是斐波那契数列中的某一个数,或者N-X是斐波那契数列中的某一个数。
请输出满足条件的最小的X。
输入格式
一行,一个整数N。 1 <= N <= 1000000。
输出格式
一个满足条件的最小的X。
输入/输出例子1
输入:
15
输出:
2
输入/输出例子2
输入:
19
输出:
2
输入/输出例子3
输入:
8
输出:
0
样例解释
样例1:因为15-2=13,而13是斐波那契数列的其中一个数。
样例2:因为19+2=21,而21是斐波那契数列的其中一个数。
样例3:因为8本身已经是斐波那契数列的一个数了。
接着直接上代码:
#include <bits/stdc++.h>
using namespace std;
long long n,a[10005],mi=1e9;//注意范围
int main(){
cin>>n;
a[1]=0;
a[2]=1;
for (int i=3;i<=10000;i++)//注意从第3位开始
{
a[i]=a[i-1]+a[i-2];
mi=min(mi,abs(a[i]-n));//求最小的值
}
cout<<mi;//输出找到的最小
return 0;
}