HDU 1005

问题:将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 ",s[c%49]);
}
}

原文地址:https://www.cnblogs.com/slay/p/10388492.html