编程任务编号 J: 病毒繁殖(效率版)

任务描述

有一种病毒,一个病毒体从它被繁殖出来后的第2个小时起,每过一小时就能繁殖一个新病毒。从最初的1个病毒个体,过若干小时后检查一次,请问此时病毒的总数量为多少。假设新老个体都没有死亡。

输入

第一行有一个整数k,表示检查的次数,0<k<=100。其后的k个数据,每个数据表示为检查的时间时刻n,0<n<=93,以小时为单位。

输出

每次检查结果输出一行,输出此时病毒总个数。

输入举例


6 1 2 3 4 5 93


输出举例


1 1 2 3 5 12200160415121876738


 

#include <stdio.h>
#include <stdlib.h>
long long unsigned s[94];
long long unsigned sum(int n){
if(s[n] !=0 ){
return s[n];
}
if(s[n-2] ==0 ){
s[n-2] = sum(n-2);
}
if(s[n-1] ==0 ){
s[n-1] = sum(n-1);
}
return s[n-2]+s[n-1];
}
int main()
{
int k,n;
scanf("%d",&k);
s[1]=s[2]=1;
while(k--){
scanf("%d",&n);
printf("%llu\n",sum(n));
}
return 0;
}