问题看出来了,只要首先出现1,1,那么循环节也就找到了(两个值决定后面的值,不断推算,这也算是类斐波那契数列的特点吧)。然后取模处理,输出即可。但是,奇怪的是提交后要么wa,要么runtime error.呵呵~不断改进:控制循环,简洁语句,让自己多想不让电脑多干。最终得到了答案:
结果让人悲伤,依然错误。借鉴了一下别人的代码,稍加改动:
居然AC了,两份代码除了数组名不一样外还有差别吗?真是醉了。。。
#include <iostream>
#include<cstdio>
using namespace std;
int f[10001];
int main()
{
int A,B,n;
f[1]=f[2]=1;
while(~scanf("%d%d%d",&A,&B,&n)&&A&&B&&n){
int i;
for(i=3;i<=10000;i++){
f[i] = (A * f[i - 1] + B * f[i - 2])%7;
if(f[i]==1&&f[i-1]==1)break;
}
n=n%(i-2);
//for(int i=1;i<=n;i++)cout<<f[i]<<" "; cout<<endl;
if(n==0)n=i-2;
printf("%d\n",f[n]);
}
return 0;
}
结果让人悲伤,依然错误。借鉴了一下别人的代码,稍加改动:
#include <iostream>
#include<cstdio>
using namespace std;
int arr[10000];
int main()
{
int A,B,n;
arr[1] = arr[2] = 1;
while(~scanf("%d%d%d",&A,&B,&n)&&A&&B&&n)
{
int i;
for(i=3; i<10000 ;i++)
{
arr[i] = (A*arr[i-1] + B*arr[i-2]) % 7;
if(arr[i] == 1 && arr[i-1] == 1)break;
}
n = n % (i-2);
if(n==0)n=i-2;
//arr[0] = arr[i-2];
printf("%d\n",arr[n]);
}
return 0;
}
居然AC了,两份代码除了数组名不一样外还有差别吗?真是醉了。。。