Number Sequence hdu1005

    技术2022-05-18  15

    Number Sequence

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

    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

     

     

    Recommend

    做题方法:

     前是打表,就是打出一大堆数据,然后发现规率:

    发现这道题是从f[1]=1,f[2]=1开始,然后依次模7,就可知f[n]只有7种情况,而相数相邻只有7*7=49种,所以从f[1]f[49]必会出现相邻两个f[m-1]=1,f[m]=1,所以f[m]为周期函数,49为其一个周期;

    代码如下:

    #include<stdio.h>

    int main()

    {

        int f[56],a,b,i;

             f[0]=1;f[1]=1;

        int n;

        while(1)

        {

            scanf("%d%d%d",&a,&b,&n);

            if(!a && !b && !n)

                                break;

            for(i=2;i<49;i++)

                f[i]=(a*f[i-1]+b*f[i-2])%7;

            printf("%d/n",f[(n-1)I]);

        }

        return 0;

    }


    最新回复(0)