犯了好多的错误后研究了下别人的代码终于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; }
转载请注明原文地址: https://www.6miu.com/read-17632.html