iris江南

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一开始以为是道很简单的递归题,于是超时

#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++改写之后发现怎么都通不过,实在难受,只好先放下

 

 

posted on 2019-11-05 19:29  iris江南  阅读(70)  评论(0)    收藏  举报