杭电ACM1005,帮忙看看为什么t的值不发生改变
发布网友
发布时间:2024-03-02 18:29
我来回答
共1个回答
热心网友
时间:2024-08-09 16:10
你这个t基本没什么用. 且周期不是5,你为何只将I<5?
1。由题目的式子可知0<=f[n]<=6,
2。而每个f[n]又是由(f[n-1],f[n-2])这个组合通过计算得出来的,
由以上两点可以推出,(f[n-1],f[n-2])出现重复的组合的最大周期为7*7=49, 即f[n]的最大周期
所有, 我们只要算出一个周期中所有的f[n]的值并记录下周期i即可.
AC代码。
#include <stdio.h>
int main()
{
int a,b,n,i,f[53];
while(scanf("%d%d%d",&a,&b,&n)==3)
{
if(a==0 && b==0 && n==0) break;
if(n==1 || n==1)
{
printf("1\n");
continue;
}
f[1]=1,f[2]=1;
a%=7,b%=7;
for(i=3; i<=52; i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1 && f[i]==1) break;
}
i=i-2;
n%=i;
f[0]=f[i];
printf("%d\n",f[n]);
}
return 0;
}