循环节 HDU1005

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 int arr[10000];
 8 
 9 int main()
10 {
11     int a,b,n,s,e;
12     while(scanf("%d%d%d",&a,&b,&n)!=EOF)
13     {
14         if(a==0&&b==0&&n==0)
15             break;
16         memset(arr,0,sizeof(arr));
17         arr[1]=arr[2]=1;
18         int flag=1;
19         for(int i=3;i<=n&&flag;i++)
20         {
21             arr[i]=(arr[i-1]*a+arr[i-2]*b)%7;
22             for(int j=2;j<i;j++)
23             {
24                 if(arr[j]==arr[i]&&arr[j-1]==arr[i-1])
25                 {
26                     s=j;
27                     e=i;
28                     flag=0;
29                     break;
30                 }
31             }
32         }
33         if(!flag)
34         {
35             int se=(n-s)%(e-s);
36             cout<<arr[se+s]<<endl;
37         }
38         else
39         {
40             cout<<arr[n]<<endl;
41         }
42     }
43     return 0;
44 }
View Code

 

posted @ 2015-09-02 09:59  相儒以沫  阅读(144)  评论(0编辑  收藏  举报