选择了递归 出现 Memory Limit Exceeded;
改成递推 出现 Time Limit Exceeded;
打表 Memory Limit Exceeded
//递推 Time Limit Exceeded
#include<iostream>
using namespace std;
int calculate(int a,int b,int n){
if(n == 1 || n == 2)
return 1;
int x = 1,y = 1,z;// x n-1 y n-2
for(int i = 3;i <= n;i++){
z = (a * x + b * y) % 7;
y = x;
x = z;
}
return z;
}
int main(){
int a,b,n;
while(cin>>a>>b>>n){
if(a == 0 && b == 0 && n == 0)
break;
cout<<calculate(a,b,n)<<endl;
}
return 0;
}
好吧。参考下网上的做法;
循环节:如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。
由于f(n-1)和f(n-2) 取值只有0,1,2,3.4,5,6这7种取值,A,B为固定值,所有f(n) = A * f(n - 1) + B * f(n - 2) 有7 * 7 = 49 种取值。注意 开始的1,1可能不是循环节。