zjut 1176 菲波那契数" - 博客后台管理 - 博客园
http://i.cnblogs.com/EditPosts.aspx?postid=3887297
#include<fstream>
#include<iostream>
#include<cmath>
using namespace std;
int main(int argc, char* argv[])
{
int a[47]={0,1,1};
int i,n;
for ( i=3;i<47;i++)
a[i]=a[i-1]+a[i-2];
while (cin>>n)
{
cout<<a[n]<<endl;
}
return 0;
}
哎呀呀,开始用递归写了一个,调试的挺好的。一提交,惨了,time limit exceeded。看来还是不能偷懒。然后就在想,不递归这玩意儿不好弄啊。看了一下指导,明白了,先把第0项到第46项求出来,放在一个数组里,然后直接查就不会超时了。嗯,还是要注意题目的特别性。
用时:3ms
#include
#define MAX 100
int n,fib[MAX],i;
int main()
{
fib[0]=0; fib[1]=1;
i=2;
while(i<47)
{
fib[i]=fib[i-1]+fib[i-2];
i++;
}
while(scanf("%d",&n)==1)
{
printf("%d/n",fib[n]);
}
return 0;
}