杭电oj 1005
这看上去是一个简单的递归问题 但是实际操作才发现 按照普通递归的方法是会出现超过内存占用限制的情况
但是还是粘上代码吧。
#include<iostream>
using namespace std;
int fn(int A,int B,int n)
{
if(n==1||n==2)
{
return 1;
}
return (A*fn(A,B,n-1)+B*fn(A,B,n-2))%7;
}
int main()
{
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0)
return -1;
cout<<fn(a,b,n)<<endl;
}
}
这是改进的ac代码
#include<iostream>
using namespace std;
int main()
{
int arr[50]={1,1};
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0||b==0||n==0)
{
return -1;
}
for(int i=2;i<49;i++)
{
arr[i]=(a*arr[i-1]+b*arr[i-2])%7;//直接将所有的情况存成一个数组
}
cout<<arr[(n-1)%49];
}
return 0;
}