一开始以为是道很简单的递归题,于是超时
#include<iostream>
using namespace std;
int func(int m , int n , int k)
{
if(k == 1 || k == 2)
return 1;
else
return (m * func(m , n , k - 1) + n * func(m , n , k - 2)) % 7;
}
int main()
{
int m , n , k;
while(cin >> m >> n >> k && !(m == 0 && n == 0 && k == 0))
{
cout << func(m , n , k) << endl;
}
return 0;
}
后来改成循环,超时:
#include<iostream>
using namespace std;
int main()
{
int m , n , k , i;
int a[100000];
a[1] = 1;
a[2] = 1;
while(cin >> m >> n >> k && !(m == 0 && n == 0 && k == 0))
{
if(k == 1 || k == 2)
return 1;
else
{
for(i = 3 ; i <= k ; i++)
{
a[i] = (m * a[i - 1] + n * a[i - 2]) % 7;
}
cout << a[k] << endl;
}
}
return 0;
}
其实这道题是一道找规律的题目,总共只有7 * 7种肯可能,于是:AC代码
#include <iostream>
using namespace std;
int arr[10000];
int main()
{
int A,B,n;
arr[1] = arr[2] = 1;
while(cin>>A>>B>>n, A || B || n)
{
int i;
for(i=3; i<10000 ;i++)
{
arr[i] = (A*arr[i-1] + B*arr[i-2]) % 7;
if(arr[i] == 1 && arr[i-1] == 1)
break;
}
n = n % (i-2);
arr[0] = arr[i-2];
cout << arr[n] << endl;
}
return 0;
}
奇怪的是,这道题我用c++改写之后发现怎么都通不过,实在难受,只好先放下
浙公网安备 33010602011771号