(1)类型:查找规律之循环节
(2)题意:有多组测试实例,每组测试数据中有A,B,n三个整数,当A=B=n=0时结束执行。给你一个数组的前两个数,以后的每项遵循公式f(n)=(A*f(n-1)+B*f(n-2)%7。
(3)解题总结:乍一看,哇,好简单的题目,再一看,哇,n那么大肯定不是那么简单的。后来就get到了点,原来它是一个循环节。因为A和B是固定的,那f数组长度至多为49。只要这一个标志结束就好了,但是%运算是个神奇的运算,在提交的过程中,自己一度以为自己的代码写错了。因为打个比方,如果数组长度为4,4%8=4,但是4%4=0,这就出现了bug。
(4)提交详情:
(5)自己的代码:
#include<iostream>
using namespace std;
const int MAX_N=1e2+6;
int a,b,n,f[MAX_N];
void solve(){
int i;
f[1]=1;f[2]=1;
for(i=3;i<51;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==1&&f[i-1]==1&&i!=3)break;
}
n%=(i-2);
if(n==0)cout<<f[i-2]<<endl;
else cout<<f[n]<<endl;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
while(cin>>a>>b>>n,a,b,n)solve();