http://acm.hdu.edu.cn/showproblem.php?pid=1005
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int a[50]={1,1},A,B,n; 8 while(cin>>A>>B>>n) 9 { 10 if(A==0&&B==0&&n==0)break; 11 else if(n>2) 12 { 13 for(int i=2;i<=(n-1)%48;i++) 14 a[i]=(A*a[i-1]+B*a[i-2])%7; 15 } 16 cout<<a[(n-1)%48]<<endl; 17 } 18 return 0; 19 }
这个是大神的解释,看不太明白。。
http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=10343&messageid=2&deep=1
我想知道,这个周期是怎么看出来的。
有谁能够解答下吗??
B
A : f[n]=g(f[n-1]%7,f[n-2]%7) %7
7 * 7 = 49 - 1 (0,0)和 (0,0)重复了。因为 n 是递增,有规律的,所以 ,7*7 -1 个的排列顺序也是固定的,虽然其中周期可能小, 7*7 -1 是最大周期,也是其他周期的整数倍。
B:
s[] 接收了输入的字符,
for ( m=i=0, //这个不说你也明白
s[i],非 0即真, char中的0是\0,你明白吧?
i++,这个没问题吧。
)
为什么是其它周期的整数倍?