杭电ACM OJ 1005 Number Sequence

A number sequence is defined as follows:

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

Given A, B, and n, you are to calculate the value of f(n).

超过49个数之后一定会出现和之前的数组合相同的情况,这个我可以了解,但是 为什么最多经过49个数之后一定会出现周期呢?智商太低了,跪求解释

这个数组是递推关系得到的,如果连续的2个数与前面某个位置的连续的2个数相同,由递推关系式一定会推出相同的结果,所以就形成循环了。

这个题目如果使用数组或者递归都会爆栈,注意到题目中的数都是对7取余,所以相邻的两个数的组合最多有49中,所以最多49次循环就会从头开始循环,这是就可以不用继续执行了,然后将n对i取余,根据余数就可以得到结果。
C++代码:
#include
const int N=55;
int dp[N];
int getRes(int A,int B,int n){
if(n==1||n==2)
r......
答案就在这里:杭电OJ 1005:Number Sequence
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?