这题我做了三个版本(囧死),一个栈溢出,一个TLE,最后一个AC.分别如下:
栈溢出:
#include<stdio.h>
long f(long a,long b,long n)
{
if(n==1) return 1;
else if(n==2) return 1;
return (a*f(a,b,n-1)+b*f(a,b,n-2))%7;
}
int main()
{
freopen("in","r",stdin);
long A,B,n;
while(scanf("%ld%ld%ld",&A,&B,&n)!=EOF&&A!=0&&B!=0&&n!=0){
printf("%ld\n",f(A,B,n));
}
return 0;
}
TLE:
#include<stdio.h>
int main()
{
freopen("in","r",stdin);
long A,B,n;
while(scanf("%ld%ld%ld",&A,&B,&n)!=EOF&&A!=0&&B!=0&&n!=0){
long f=1,f1=1,f2=1,i;
for(i=3;i<=n;i++){
f = (A*f2+B*f1)%7;
f1 = f2;
f2 = f;
}
printf("%ld\n",f);
}
}
#include<stdio.h>
int main()
{
freopen("in","r",stdin);
long A,B,n;
while(scanf("%ld%ld%ld",&A,&B,&n)!=EOF&&A!=0&&B!=0&&n!=0){
long i;
int f[50];
f[0] = f[1] = 1;
for(i=2;i<50;i++){
f[i] = (A*f[i-1]+B*f[i-2])%7;
}
printf("%d\n",f[(n-1)%48]);
}
}