Number Sequence

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一循环,虽然我不知道为什么,但是我知道他是有循环了,在代码里算了一下到底是几个一循环。然后操作了一番。得出了答案。不过这个方法说起来终究取巧。我也不知道为什么大家都知道他是循环的。
下去一定要好好学一下矩阵快速幂,等我学会,我再来更新。嘿嘿
题外话:
虽然是一道不太难的题,但我还是自己研究了一上午,又和同学讨论了半下午。中间一度崩溃,哭泣,想要放弃。但幸好最后还是半懂半不懂的做出来了。也许自己天生迟钝一些,还是要多下一些功夫哇。以此勉励自己,要更加努力,才不会和别人的差距越来越大。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值