OpenJudge - 1788:Pell数列

题目描述
Pell数列a[1],a[2],a[3]…的定义是这样的,a[1]=1,a[2]=2, … , a[i]=2*a[i]−1+a[i]-2 (i>2)
给出一个正整数k,要求Pell数列的第k项%32767是多少。
思路点拨
我们跑一个循环,找出测试数据中的最大值,记为maxn,然后求出Pell数列中3~maxn项的值,注意在求值的过程中你要求一个模一个,否则结果可能就会超出int型的范围。最后再输出测试数据在Pell数列中对应的值就完成了。
代码:

#include 
#define MAXN 1000000
#define BASE 32767
using namespace std;
int n; //n是测试数据的个数
int test_data[MAXN+5]; //测试数据
int maxn; //用来记录测试数据中的最大值
int Pell[MAXN+5]; 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) { //读入测试数据,并把最大值找出来
		scanf("%d",&test_data[i]);
		if(test_data[i]>maxn) maxn=test_data[i];
	}
	Pell[1]=1;
	Pell[2]=2;
	for(int i=3;i<=maxn;i++) 
		Pell[i]=(2*Pell[i-1]+Pell[i-2])%BASE; //注意不要被误导了,是2*a[i-1] + a[i-2],不是2* (a[i-1]+a[i-2])哦
	for(int i=1;i<=n;i++) 
		printf("%d\n",Pell[test_data[i]]);
	return 0;
}

小伙伴们还有什么要说的吗,欢迎在评论区里留言哦~

你可能感兴趣的:(OpenJudge)