犯了好多的错误后研究了下别人的代码终于ac了
error1:没有关注当n=1或n=2时的测试数据
error2:没有注意一个循环里面最后一个数,因为一个循环最后一个数如果要取余的话是等于0的。而我并没有定义当n=0时的数据
思路很简单,找规律,容易发现如果出现循环的话是有两组两个数的数据相等,所以直接找m[i]==1&&m[i-1]==1
#include<stdio.h>
int main(){int a,b,m[53],n,i;
while(scanf("%d %d %d",&a,&b,&n)){
if(a==0&&b==0&&n==0)
break;
if(n==1|| n==2){
printf("1\n");
continue;
}
m[1]=1;m[2]=1;
a=a%7;b=b%7;
for(i=3;i<53;i++){
m[i]=(a*m[i-1]+b*m[i-2])%7;
if(m[i]==1&m[i-1]==1)
break;
}
i=i-2;
n=n%i;
m[0]=m[i];
printf("%d\n",m[n]);
}
return 0;
}