第六周-001:Pell数列

001:Pell数列

总时间限制: 

3000ms

内存限制: 

65536kB

描述

Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。

输入

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。

输出

n行,每行输出对应一个输入。输出应是一个非负整数。

样例输入

2
1
8

样例输出

1
408
# define _CRT_SECURE_NO_DEPRECATE
#include 
using namespace std;

int main()
{
	int n;
	int m;
	long res[10000];
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%ld", &m);
		long a[1000000];
		for (int j = 1; j <= m; j++)
		{
			if (j < 3)
			{
				a[j] = j;
			}
			else
			{
				a[j] = 2 * a[j - 1] + a[j - 2];
			}
		}
		res[i] = a[m] % 32767;
	}
	for (int i = 1; i <= n; i++)
	{
		printf("%ld\n", res[i]);
	}
	system("pause");
	return 0;
}

VS运行代码,总是一闪而过,编译运行都没有弹出错误窗口,可能是因为设置了1000000个long型的数组,开辟的空间太大了,所以崩了。

度娘参考了一下:https://blog.csdn.net/qq_40486952/article/details/83154453

# define _CRT_SECURE_NO_DEPRECATE
#include 
using namespace std;

int main()
{
	int n;
	int m;
	int res[10000];
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%ld", &m);
		long long a[3];
		if (m == 1)
		{
			res[i] = 1 % 32767;
		}
		else if (m == 2)
		{
			res[i] = 2 % 32767;
		}
		else
		{
			a[1] = 1;
			a[2] = 2;
			for (int j = 3; j <= m; j++)
			{
				a[3] = (2 * a[2] + a[1]) % 32767;
				a[1] = a[2];
				a[2] = a[3];
			}
			res[i] = a[3];
		}

	}
	for (int i = 1; i <= n; i++)
	{
		printf("%ld\n", res[i]);
	}
	system("pause");
	return 0;
}

结果运行成功。

总结一下:我感觉个人对于题目Pell数列的第k项模上32767是多少理解有歧义,我之前理解为Pell数列的最后1项第k项才需要模上32767,代码运算的时候按照案例输入8输出结果为408符合要求,在测试过程中却不对了,按题意要求对每一项都需要模上32767,这导致了程序开始失败

 

你可能感兴趣的:(C-C++,中国大学MOOC)