HDU-1005(规律题)

Number Sequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 92129    Accepted Submission(s): 21967


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
#include<iostream>
#include<string>
using namespace std;
int a[21];
int A=1, B=1, n;
int f(int x)
{
    if (x == 1 || x == 2)return 1;
    if (a[x])return a[x];
    else return a[x] = (A*f(x - 1) + B*f(x - 2)) % 7;
}
int main()
{
    while (1){
        cin >> A >> B >> n;
        if (A == 0 && B == 0 && n == 0)break;
        memset(a, 0, sizeof(a));
        f(20);
        a[0] = a[16];
        a[1] = a[17];
        a[2] = a[18];
        if (n == 1 || n == 2){
            cout << "1
";
        }
        else{
            cout << a[n % 16] << endl;
        }
    }

    system("pause");
    return 0;
}

规律题,只要把前几十个打出来看一下就知道了。水题~

世上无难事,只要肯登攀。
原文地址:https://www.cnblogs.com/littlehoom/p/3549276.html