i<50 应改成 i<51,因为虽然只有49种排列,但你要比较的是一对数,所以要加多 1。
改之后还是不行,因为 1,1 可能不在循环的队列中。
#include
#include
#define N 520
int A, B, n;
int b, e;
int a[N];
void init()
{
int i, j;
a[1] = 1;
a[2] = 1;
for(i=3; i<500; i++)
{
a[i] = (A*a[i-1] + B*a[i-2]) % 7;
for(j=1; j
{
if(a[j] == a[i-1] && a[j+1] == a[i])
{
b = j;
e = i-2;
return ;
}
}
}
}
int main()
{
while(scanf("%d%d%d", &A, &B, &n) && n)
{
init();
if(n<=e)
printf("%d\n", a[n]);
else
{
int _x = (n-b)%(e-b+1)+b;
printf("%d\n", a[_x]);
}
}
return 0;
}
另一种能通过的 方法:
#include
#include
using namespace std;
int f[52];
int main()
{
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0)
break;
f[1]=1;
f[2]=1;
int xh=0;
int i;
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;
}
}
xh=i-2;
n=n%xh;
if(n==0)n=xh;
cout<
return 0;
}
会不会出现t=0的情况
你试试看if(t==0)while(1);看看会不会超时
if(n%t!=0)
t=n%t;