试题 C:数列求值
本题总分:10 分
【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案:4659
思路:因为结果只要最后4位数字,所以每做一次加法就对10000取模即可。
感想:这个题我开始以为数组和递归都是可以的,但是代码打出来只会我才发现原来递归会因为内存不足而爆掉,好像可以改内存,但是对于这种简单的题的话,就没有必要了,所以并不建议数据很大时进行递归;
数组法:
#include "stdafx.h"//若VC,则删除这一段
#include<iostream>
#include<algorithm>
using namespace std;
#define MOD 10000//大数组,必须在主函数外定义,否则会溢出
int a[20190324]={0,1,1,1};
int main()
{
for(int i=4;i<20190325;i++)
a[i]=(a[i-1]+a[i-2]+a[i-3])%MOD;
cout<<a[20190324]<<endl;
return 0;
}
递归法(因为内存爆掉所以答案计算不出来):
#include "stdafx.h"
#include<iostream>
#include<algorithm>
using namespace std;
#define MOD 10000
int f(int n)
{
if(n<4)
return 1;
else
return (f(n-1)+f(n-2)+f(n-3))%MOD;
}
int main()
{
cout<<f(20190324)<<endl;
}