题目意思很简单,递推求fn,但是由于给出的数据比较大,直接用for循环肯定超时,这就不得不考虑循环的问题了,由于fn对7取余,所以其取值只能是0,1,2,3,4,5,6这七个数,所以递推求得的fn只能有7*7=49种可能,第五十个数肯定会循环前49个数的一部分,这里要注意,循环节不一定是从1 ,1,开始的。
c代码:
#include <stdio.h>
#include <math.h>
int f[50];
int main()
{
int a,b,n;
f[1] = f[2] = 1;
while(1)
{
scanf("%d%d%d",&a,&b,&n);
if(a==0 && b==0 && n==0)
break;
for(int i=3;i<=49;i++)
{
f[i] = (a*f[i-1]+b*f[i-2]) % 7;
}
printf("%d\n",f[n%49]);
}
return 0;
}
java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
int a = in.nextInt();
int b = in.nextInt();
int n = in.nextInt();
if(a == 0 && b == 0 && n == 0)
System.exit(0);
int [] f = new int[50];
f[1] = f[2] = 1;
for(int i=3;i<=49;i++)
{
f[i] = (a*f[i-1]+b*f[i-2]) % 7;
}
System.out.println(f[n%49]);
}
in.close();
}
}