</pre><p>马尔扎哈的疑惑时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 244 测试通过 : 74 题目描述众所周知,虚空先知马尔扎哈的被动技能可以召唤宠物用来辅助战斗,但可惜的是,宠物数量最多只能有3个,显然,这不够强力。最近,通过马尔扎哈的不懈努力,终于改进了这个技能——他第1秒时只有一个宠物,该宠物每过一秒又可以生出一个新宠物,而新宠物从他出生的第3秒开始,每过一秒也可以生出一个新宠物,新的宠物也以此类推。请问,在第n秒时,马尔扎哈总共有多少个宠物?输入先输入一个正整数T,表示样例个数,1≤T≤100;对于每一个测试样例,输入一个正整数n,表示第n秒,1≤n≤55。输出对于每一个测试样例,输出第n秒时,马尔扎哈拥有的宠物数。题目保证结果在int范围内。样例输入245样例输出46题目来源yuman</p><p></p><pre code_snippet_id="613967" snippet_file_name="blog_20150307_6_5866880" name="code" class="cpp">#include<iostream>
using namespace std;
int num(int n)
{
if(n<=4) return n;
else return num(n-1)+num(n-3);
}
int main()
{
int T,i,n;
cin>>T;
for(i=0;i<T;i++)
{
cin>>n;
cout<<num(n);
}
}
使用递归,n较小时运行时间差不多,但当n达到50多时,就会出现超时情况。因为每次运行都要从1-n扫描计算一遍,n较大时,运行时间自然变长!
#include<iostream>
using namespace std;
int a[1000];
int main()
{
int T,i,n,j;
cin>>T;
for(i=0;i<T;i++)
{
cin>>n;
for(j=1;j<=3;j++) //是可以的。元素值存入数组。
<span style="white-space:pre"> </span>a[j]=j;
for(j=4;j<=n;j++)
a[j]=a[j-1]+a[j-3]; //把元素值存入数组中,a[n]=a[j]+a[j-3]不报错,
//但a[n]=0,结果错误!低级错误,不经常编程的后果。
cout<<a[n]<<endl;
}
return 0;
}
使用数组,则不会出现超时情况,因为,每一次运行元素值都存在数组里了。输入n,只需要计算
a[j]=a[j-1]+a[j-3];
一次即可。