Problem Description 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).
Input The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
Author CHEN, Shunbao
Source ZJCPC2004
问题描述
数字序列定义如下:
f(1)=1,f(2)=1,f(n)=(Af(n-1)+Bf(n-2))%7。
给定A,B,和n,你要计算f(n)的值。
输入
输入由多个测试用例组成。每个测试用例在一行上包含3个整数A、B和n(1<=A、B<=1000、1<=n<=100000000)。三个零表示输入结束,不处理此测试用例。
输出
对于每个测试用例,在一行上打印f(n)的值。
输入样例
1 1 3
1 2 10
0 0 0
输出样例
2
5
#include<stdio.h>
const int maxn = 1005;
int a, b, n;
int F[maxn];
int main()
{
F[1] = F[2] = 1;
while (~scanf("%d%d%d", &a, &b, &n)) {
if(a==0&&b==0&&n==0) return 0;
int k;
for (k = 3; k < 1000; k++) {
F[k] = (a*F[k - 1] + b * F[k - 2]) % 7;
if (F[k] == 1 && F[k - 1] == 1) break;
}
n = n % (k - 2);
F[0] = F[k - 2];
printf("%d\n", F[n]);
}
return 0;
}
没有错,这是一个简简单单的代码。我在网上看到大家都用49一循环,虽然我不知道为什么,但是我知道他是有循环了,在代码里算了一下到底是几个一循环。然后操作了一番。得出了答案。不过这个方法说起来终究取巧。我也不知道为什么大家都知道他是循环的。
下去一定要好好学一下矩阵快速幂,等我学会,我再来更新。嘿嘿
题外话:
虽然是一道不太难的题,但我还是自己研究了一上午,又和同学讨论了半下午。中间一度崩溃,哭泣,想要放弃。但幸好最后还是半懂半不懂的做出来了。也许自己天生迟钝一些,还是要多下一些功夫哇。以此勉励自己,要更加努力,才不会和别人的差距越来越大。