C
至至子的斐波那契
题意:
至至子会进行 TT 次询问,每次询问给定一个数 a[i],他想让你找到斐波那契数列中距离a[i] 最近的一项,即求一个正整数 x 使得在满足 |F[x] - a[i]| 最小的基础上 xx 尽量小。
首先:先把斐波那契数列求出来:
f[1]=1,f[2]=1;
for(long long i=3;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
运用到二分
#include<bits/stdc++.h>
using namespace std;
long long t;
const long long n=90;
long long f[100];
long long a;
int main()
{
f[1]=1,f[2]=1;
for(long long i=3;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
cin>>t;
while(t--)
{
cin>>a;
long long pos=lower_bound(f+1,f+n+1,a)-f;
printf("%lld\n",abs(f[pos]-a)<abs(f[pos-1]-a)?pos:pos-1);//19行
}
return 0;
}
19行:比较相邻两个的远近,
注意:距离相等,取下标更小的