杭电oj刷题——1005(数字序列)
杭电oj刷题——1005(数字序列)
问题描述:
题目网址: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<iostream>
#include<string.h>
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.****.net/u011000290/article/details/47379977