思路
刚看到这道题的时候,第一反应是用for循环直接求出f(n)的值,但递交代码时,却发现超时了,再去认真看题目,发现n最大109 ,这样是不行的。
然后去看了看大佬的,发现这个题目是有规律的:
//f(n-1)和f(n-2)求模后,都在0-6
//所以共有49种情况,所以最坏50次循环一次
//最后只需要结果取模49就行了
源码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a[100]={0};
a[1]=1,a[2]=1;
int i,j,k;
while(scanf("%d %d %d",&i,&j,&k)!=EOF&&(i!=0||j!=0||k!=0)){
for(int t=3;t<=49;t++)
a[t]=(i*a[t-1]+j*a[t-2])%7;
cout<<a[k%49]<<endl;
}
return 0;
}
//f(n-1)和f(n-2)求模后,都在0-6
//所以共有49种情况,所以最坏50次循环一次
//最后只需要结果取模49就行了