题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005
题目大意:
1.多组测试数据,依次输入A,B,n(1 <= A, B <= 1000, 1 <= n <= 100,000,000),输入0 0 0 终止;
2.f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7;
3.输出 f(n)。
解题思路:
1.n的数值很大,这类数值很大的问题一般都有规律,找出循环节(周期)是关键;
2.找规律,这道题是从 f(1) = 1 和 f(2) = 1 开始,然后依次模7,可知 f(n) 只有7种情况,所以两数相邻只有7*7=49种;
3.所以从 f(1) 到 f(49) 必会出现相邻两个 f(m-1) = 1 , f(m) = 1,所以 f(n) 为周期函数,49为其一个周期;
需要注意的地方:
做题的时候不要盲目的上手去做,先要仔细分析题目,先动脑再动手。
代码如下:
// hdoj_1005 Number Sequence
// 31MS 220K 370 B GCC
#include
int fun(int a, int b, __int64 n);
int main(void)
{
int a, b;
__int64 n;
while(scanf("%d%d%I64d", &a, &b, &n) && a != 0 && b != 0 && n != 0)
{
printf("%d\n", fun(a, b, n%49));
}
return 0;
}
int fun(int a, int b, __int64 n)
{
if(n == 1 || n == 2)
return 1;
else
return (a*fun(a, b, n-1) + b*fun(a, b, n-2)) % 7;
}