
倚天照海花无数,流水高山心自知。
如果A或B中有一个是7的倍数.且n>1000,它这个程序就不对了.
如果A是7的倍数.
f=(A*f(n-1)+B*f(n-2))%7
=B*f(n-2)
此时
if(f[i-1]==1&&f[i]==1)这个是不可能成立的
要改为if(f[i]==1)
第二题格式错了
改正如下
#include<stdio.h>
#include<math.h>
#define M 1000
int main()
{
int x,y,t,sq;
while(EOF!=scanf("%d%d",&x,&y))
{
t=y-x;
if(t==0)
printf("0\n");
else
{
sq=(int)sqrt(t);
if(sq*sq==t)
printf("%d\n",2*sq-1);
else if(t>(sq+1)*(sq+1)-(sq+1))
printf("%d\n",2*(sq+1)-1);
else
printf("%d\n",2*(sq+1)-2);
}
}
return 0;
}
我的第一个代码有问题
改正:
#include<stdio.h>
int T[7][7];
int num[7][7][100];
void T_num()
{
int a,b,index,f1,f2,f,count;
for(a=0;a<7;a++)
for(b=0;b<7;b++)
{
f1=1;
f2=1;
index=0;
count=0;
while(1)
{
f=(a*f2+b*f1)%7;
if(index>2 && f2==num[a][b][0] && f==num[a][b][1])
break;
num[a][b][index++]=f;
f1=f2;
f2=f;
count++;
}
T[a][b]=count-1;
}
}
int main()
{
int a,b;
long n;
T_num();
while(EOF!=scanf("%d%d%ld",&a,&b,&n))
{
if(a==0 && b==0 && n==0)
break;
if(n==1 || n==2)
{
printf("1\n");
continue;
}
a%=7;
b%=7;
printf("%d\n",num[a][b][(n-3)%T[a][b]]);
}
return 0;
}
cwande的也有问题.
提供一个测试数据
A=6,B=7,n=3000
cwande程序算得6
我改正过的程序算得1
下边这个程序算出来也是1
#include<stdio.h>
int main()
{
int f1=1,f2=1,f,i;
int a=6,b=7;
for(i=3;i<=3000;i++)
{
f=(a*f2+b*f1)%7;
f1=f2;
f2=f;
}
printf("%5d\n",f);
return 0;
}