大佬们说说这道题怎么理解呢?
在网上看到有人的解法如下,并且是ac的:
#include<stdio.h> int main() { int a,b,n,i,arr[49]={1,1}; while(scanf("%d%d%d",&a,&b,&n)&&(a|b|n)) { for(i=2;i<49;i++) arr[i]=(a*arr[i-1]+b*arr[i-2])%7; printf("%d\n",arr[(n-1)%49]);//数组下标从0开始,所以n先减1 } return 0; }
想知道 其中的 %49是如何理解的。f(n-1)的取值范围为[0,6],同样f(n-2)的取值范围也是[0,6],两个数的组合为(0,0),(0,1)(1,1)......(6,6)一共有7*7=49种不同的组合。所以49是可能的最大周期数,但也有一些的周期数是小于49,例如a=2,b=3时,周期大小为6,每个周期中的数为 1,1, 5, 6, 6, 2。像这种情况还可以用 % 49去做吗?求大佬解释一下
#笔试题目#