0
点赞
收藏
分享

微信扫一扫

hdu 1005

#include<iostream> 

 #include<iostream> 

 #include<cstdio> 

 #include<cstring> 

 using namespace std; 

 int f[10001]; 

 int main() 

 { 

     int a,b,n; 

     f[2]=f[1]=1; 

     while(~scanf("%d %d %d",&a,&b,&n)&&(a||b||n)) 

     { 

       for(int i=3;i<=49;i++) 

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

       f[0]=f[49]; 

       n=n%49; 

       printf("%d\n",f[n]); 

     } 

     return 0; 

 } 

 /*本题需要仔细观察,发现规律,因为f[i]是对7取余,所以 

 只可能有0,1,2,3,4,5,6七种取值, f[i]=(a*f[i-1]+b*f[i-2])%7; 

 中f[i-1]和f[i-2]均只有七种取值,所以总共最多出现49种 

 取值情况,49为最大循环节,意味着1,1这两个连续的数最多 

 在50,51,取得*/

举报

相关推荐

0 条评论