[解题报告]HDU 1005 Number Sequence

Number Sequence

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


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
 

 

Recommend
JGShining
 

 一般来说第一眼看完题肯定想到用循环嵌套对吧。

呵呵,这样肯定超时

还好这个结果是有规律的,当然,意识到结果是有规律的这点很难得

比如说A=B=1;

那么f(n)依次为

1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0,1 1......

所以说只要用数组保存一个循环然后根据n算出对应的f(n)即可

#include<stdio.h>
int main()
 {
     long n;
     int A,B,f[200];
     while(scanf("%d %d %ld",&A,&B,&n)!=EOF&&A&&B&&n)
   {
        int j;
        for(j=0;j<200;j++)
        {
            f[j]=0;
        }
        if(n==1||n==2)
            printf("1\n");
       else
       {
           long i;
           f[1]=1;
           f[2]=1;
            for(i=3;i<200;i++)
            {
               f[i]=(A*f[i-1]+B*f[i-2])%7;
                if(f[i]==1&&f[i-1]==1)
                    break;
            }
            i=i-2;
            f[0]=f[i];
            printf("%d\n",f[n%i]);
        }
   }
    return 0;
}

 

posted @ 2013-03-13 20:43  三人木君  阅读(327)  评论(0编辑  收藏  举报