点击打开链接
题目意思很简单,递推求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(); } }