题意翻译
斐波那契数列,指得是这样一个数列:数列的第一个数为1,第二个数为2,接下来每个数都等于前面2个数之和,即:1, 2, 3, 5, 8, 13……现给出一个非负整数N(也可能为0),求斐波那契数列中第N项是多少?
思路
法1:模拟做,根据斐波那契数列公式,模拟输出即可。
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int a[1001]={1,1},i,j,s=0,n; scanf("%d",&n); for(i=2;i<=45;i++) { a[i]=a[i-1]+a[i-2]; } printf("%d\n",a[n]);//一定要回车 return 0; }
法2:打表做。打表是一种思想,小数据杀手,使得程序事半功倍,效率极快。
生成2个程序,一个负责提交,另一个子程序负责生成斐波那契数列。
//子程序,生成斐波那契数列 #include <cstdio> using namespace std; int main() { freopen("feb.out","w",stdout); long long a[1001]={1,1},i,j,s=0; for(i=2;i<=60;i++) { a[i]=a[i-1]+a[i-2]; printf("%lld,",a[i]); } fclose(stdout); return 0; }
接着把上面输出的数据打表至下面的程序。
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int a[61]={1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903,2971215073,4807526976,7778742049,12586269025,20365011074,32951280099,53316291173,86267571272,139583862445,225851433717,365435296162,591286729879,956722026041,1548008755920,2504730781961};//斐波那契数列表 int n,i; scanf("%d",&n); printf("%d\n",a[n]);//一定要回车 return 0; }