2041:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041
解题代码:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a[41],m,i;
scanf("%d",&m);
a[1]=0;
a[2]=1;
a[3]=2;
if(m>3)
{
for(i=4;i<=m;i++)
{
a[i]=a[i-1]+a[i-2];
}
}
printf("%d\n",a[m]);
}
return 0;
}
这道题的思路:我先列举前几项输出结果,发现解题思路和前面第2018题的“母牛的故事”相似,也是用到递归的想法。刚开始我把数组a的大小设定为40,但在系统上面一直不通过,经过多次尝试,我把其大小改大了一点后(上方改成41)就通过了。经验教训是:下次定义数组时可以把它的大小稍微定义大一点(就不用想那么多了)。
还有一道题也是用到了递归的思想:2044
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044
解题代码如下:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a,b,i;
scanf("%d%d",&a,&b);
long long c[100];
c[1]=1;
c[2]=2;
if(b-a>2)
{
for(i=3;i<=b-a;i++)
{
c[i]=c[i-1]+c[i-2];
}
}
printf("%lld\n",c[b-a]);
}
return 0;
}
这道题做完后代码运行结果没问题,但在系统上面一直不通过,一直找不到问题所在。在查看大佬们的做法后发现原来我忽略了数组的溢出问题,我原先是把数组c定义成int类型,但后面的运行结果明显会超出int的范围,于是我把int改成long long类型,就成功通过了!