问题:将f(n)用数组存储但是不清楚数组该设置多大,同时不知该如何控制输入000时结束输入。在写程序时,直接利用for循环为每个f(n)赋值,忽略了时间复杂度。
解决:由题目%7得若为一个数7循环两个数为7*7=49循环,前49个计算后面的只需n%49即可对应得出,故只需设置数组大小50,数组a[1]而不是a[0]设置为f(1)为了对应方便;
000结束输入可用输入循环内部用if000时break;或者return 0;
程序:
#include<iostream>
using namespace std;
int main(void){
int a,b,c,s[50];
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
if(a==0&&b==0&&c==0) return 0;
s[1]=1,s[2]=1;
for(int i=3;i<50;i++){
s[i]=(a*s[i-1]+b*s[i-2])%7;
}
printf("%d\n",s[c%49]);
}
}