本文共 456 字,大约阅读时间需要 1 分钟。
#include<iostream> #include<iostream> #include<cstdio> #include<cstring> using namespace std; int f[10001]; int main() { int a,b,n; f[2]=f[1]=1; while(~scanf("%d %d %d",&a,&b,&n)&&(a||b||n)) { for(int i=3;i<=49;i++) f[i]=(a*f[i-1]+b*f[i-2])%7; f[0]=f[49]; n=n%49; printf("%d\n",f[n]); } return 0; } /*本题需要仔细观察,发现规律,因为f[i]是对7取余,所以 只可能有0,1,2,3,4,5,6七种取值, f[i]=(a*f[i-1]+b*f[i-2])%7; 中f[i-1]和f[i-2]均只有七种取值,所以总共最多出现49种 取值情况,49为最大循环节,意味着1,1这两个连续的数最多 在50,51,取得*/转载地址:http://hdgsi.baihongyu.com/