杭电oj刷题——1005(数字序列)

杭电oj刷题——1005(数字序列)

问题描述:
杭电oj刷题——1005(数字序列)_第1张图片
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1005
Sample Input
1 1 3
1 2 10
0 0 0

Sample Output
2
5

#include
#include
using namespace std;
int main()
{
    int A, B, n;
    int f[51] = {-1};//定义一个数组长度为51,因为循环体长度最多只可能是49
    int start, len;
    while(true)
    {
        cin >> A >> B >> n;
        if(A == 0 && B == 0 && n == 0)
            break;
        f[1] = f[2] = 1;
        for(int i = 3; i < 51; i++)
        {
            f[i] = (f[i - 1] * A + B * f[i - 2]) % 7;
            for(int j = 1; j < i; j++)
                if(f[i] == f[j] && f[i - 1] == f[j - 1])
                {
                    len = i - j;//记录循环体长度
                    start = j - 1;//记录循环体首部
                    break;
                }
        }
        if(n <= start)
            cout << f[n] << endl;
        else
            cout << f[start + (n - start) % len] << endl;
    }
    return 0;
}

解题思路参考这篇博客:https://blog.csdn.net/u011000290/article/details/47379977

你可能感兴趣的:(杭电oj)