2019-05-07

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类型,就成功通过了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容