题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=15516

题意:

     f(1)=1,f(2)=1,f(n)=(A * f(n - 1) + B * f(n - 2)) mod 7.

     给你一个A,B和n,你需要求出f(n)的值。(1<=A,B<=1000,1<=n<=100,000,000)

     输入3个0,程序结束。

     案例:

     input

     1 1 3

     1 2 3

     0 0 0

     output

     2

     5

思路分析:

     n的范围过大,根本没办法直接循环,这就需要去找规律。

     进行部分输出可发现,经过49个数是一个循环,这样只需找出每次案例的前49个数,再求出n%49的值,找出所要得的数的位置。输出f[n%49-1]即可。

源代码如下:

 1 #include<iostream>
 2 #define max 100000000
 3 using namespace std;
 4 int main()
 5 {
 6     int A,B,n,f[49];
 7     cin>>A>>B>>n;
 8     f[0]=1;f[1]=1;
 9     while(A!=0&&B!=0&&n!=0)
10     {
11          for(int i=2;i<49;i++)
12              f[i]=(A*f[i-1]+B*f[i-2])%7;
13           cout<<f[n%49-1]<<endl;
14           cin>>A>>B>>n;
15     }
16     return 0;
17 }

 

posted on 2015-07-18 08:51  尘埃。  阅读(156)  评论(0编辑  收藏  举报