[洛谷]AT240 算盤の書 (#递推 -1.1)(#打表 -1.1)

题意翻译

斐波那契数列,指得是这样一个数列:数列的第一个数为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;
}

猜你喜欢

转载自blog.csdn.net/Apro1066/article/details/80565835
1.1