暂不知道怎么办,递归层数过多
Runtime Error
(STACK_OVERFLOW)
-------2012-04-17
#include <iostream>
using namespace std;
int A, B, n;
int func( int x )
{
if( x == 1 || x == 2)
return 1;
else// x > 2
return ( A * func( x - 1 ) + B * func( x - 2 ) ) % 7;
}
int main()
{
while( cin >> A >> B >> n )
{
if( A==0 && B==0 && n==0 )
break;
cout << func(n) << endl;
}
return 0;
}
/*
Sample
1 1 3
1 2 10
0 0 0
*/
看了别人的解答,该题就是打表题。并且结果会出现循环
所以只需要打表,然后找是否发生循环
-------2012-12-21
#include<iostream>
#define MAX 2000
using namespace std;
int main()
{
int a, b, n, i, func[MAX];
while (cin >> a >> b >> n && n != 0 && a != 0 && b != 0)
{
func[1] = func[2] = 1;
for (i = 3; i < MAX;i ++)
{
func[i] = (a * func[i-1] + b * func[i-2]) % 7;
if (func[i] == 1 && func[i-1] == 1) // 找到循环点
break;
}
n = n % (i - 2);
func[0] = func[i-2]; //整除时 n = 0 so 为f[0]赋f[i-2]
cout << func[n] << endl;
memset (func, 0, sizeof(func));
}
}