网易:Fibonacci数列

题目链接: Fibonacci数列

第一种做法:

就是求fibonacci和查找
lower_bound与upper_bound的用法

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 36;
int num[maxn]; 
int fib(int i);
int main()
{
	memset(num,0,sizeof(num));
	fib(35);
	int n;
	while(cin>>n)
	{
		int ans;
		int *a;
		a=lower_bound(num,num+36,n);
		ans=(*a)-n<(n-*(a-1))?(*a)-n : (n-*(a-1));
		cout<<ans<<endl;
	}
	return 0;
}
int fib(int i)
{
	if(num[i]==0)
	{
		if(i==1 || i==2)
		{
			num[i]=1;
			return 1;
		}else 
		{
			num[i-1]=fib(i-1);
			num[i-2]=fib(i-2);
			return num[i]=num[i-1]+num[i-2];
		}		
	}
	else return num[i];
}

猜你喜欢

转载自blog.csdn.net/q1122333/article/details/82847786