最多49一循环,关键是找到循环起点和循环次数,循环起点不一定为f[1],所以要把数组适当开大点。
之前一直把循环起点当成1了。所以老是WA。%>_<%
附ac代码:
#include <stdio.h> int f[100]; int main(){ int a, b, n, i, j, cir; while(scanf("%d%d%d", &a, &b, &n), a || b || n){ f[1] = f[2] = 1; cir = 0; for(i = 3; i != 100; ++i){ f[i] = (a * f[i - 1] + b * f[i - 2]) % 7; for(j = 2; j != i; ++j) if(f[j - 1] == f[i - 1] && f[j] == f[i]){ cir = i - j; break; } if(cir) break; } printf("%d\n", f[(n - j) % cir + j]); } return 0; }
原文:http://blog.csdn.net/chang_mu/article/details/19283869