|

楼主 |
发表于 2023-3-12 20:40:04
|
显示全部楼层
正解:(来自CSDN)
思路:
因为循环的条件就是有2个数m和n
f[m-1] = f[n-1], f[m] = f[n]
这样就会开始循环了。
即f[n-1], f[n]与之前的[m-1],f[m]分别对应
而 0 <= f[n-1],f[n] < 7
所以f[n-1]f[n]连着的情况有7*7的情况。
只需每次求出一个f[n],然后比较f[n-1]f[n]与前面数的情况即可。
- #include<stdio.h>
- int main()
- {
- long int a,b,n,T,s[101];
- while(scanf("%ld%ld%ld",&a,&b,&n)&&(a!=0&&b!=0&&n!=0))
- {
- int i,j,T;
- s[0]=1;
- s[1]=1;
- for(i=2;i<101;i++)//第一个循环
- {
- s[i]=(a*s[i-1]+b*s[i-2])%7;
- for(j=1;j<i-1;j++)//第二个循环
- {
- if(s[j-1]==s[i-1]&&s[j]==s[i])
- {
- T=i-j;
- break;
- }
- }
- }
- n = n%T;
- printf("%ld\n",s[n-1]);
- }
- return 0;
- }
复制代码 |
|