思路一:循环计算,直到第n个值
结果:超时;
思路二:用一个100大小的数组记录前100个结果,直到再次出现1,1且不为第一第二个时,出现循环,然后用(n-1)%i——i为周期长度——计算第n个值
结果:忽略了可能不以1,1为开头的循环,例如1,1,2,3,0,4,2,3,0,4.......
思路三:仔细分析,只需7*7个数必定出现循环(因为模7只能出现7种结果),所以直接以49作为周期,其余同思路2
结果:顺利AC
贴上代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
int n,A,B,t[50];
while(cin>>A>>B>>n&&(A||B||n)){
int temp_n=1,temp_m=1,result=1;
memset(t, 0, 49);
t[0]=1;t[1]=1;
if(A==0&&B==0){
if(n==1||n==2)
result = 1;
else
result = 0;
}
else{
for(int j=2;j<50;j++){
result = (temp_n*A+temp_m*B)%7;
t[j]=result;
temp_m=temp_n;
temp_n=result;
}
result = t[(n-1)%49];
}
cout<<result<<endl;
}
return 0;
}