杭电ACM1005

2025-02-19 07:14:30
推荐回答(3个)
回答1:

你确定周期在50以内么?
你这里已经默认周期最大为50了。

你应该先求一下周期。
每个数出来的值都是7以内的,因为mod7
那你可以把连续二个值, xx 存起来, 建一个 int hash[100]的数组。

如果hash[xx]存在过了,就可以求出他的周期。

回答2:

regular判断函数有问题
周期肯定存在,但不一定是从1 1开始
反例数据
121 21 100
你的代码结果,1
ac代码结果 4

回答3:

你写的太麻烦啦,下面是我写的;可以参考参考;不懂的再问我;
#include
int main()
{
int A,B,f[50],i,j;
long long n;
while(scanf("%d%d%lld",&A,&B,&n)!=EOF)
{
f[1]=1;f[2]=1;
if(A==0&&B==0&&n==0)break;
else{
for(i=3;i<50;i++)
{
f[i]=(A*f[i-1]+B*f[i-2])%7;
if(f[i]==1&&f[i-1]==1) break;
}
j=n%(i-2);
if(j==0){j=i-2;printf("%d\n",f[j]);}
else
printf("%d\n",f[j]);

}
}
return 0;
}