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;
}
這道題的思路:我先列舉前幾項(xiàng)輸出結(jié)果,發(fā)現(xiàn)解題思路和前面第2018題的“母牛的故事”相似,也是用到遞歸的想法。剛開(kāi)始我把數(shù)組a的大小設(shè)定為40,但在系統(tǒng)上面一直不通過(guò),經(jīng)過(guò)多次嘗試,我把其大小改大了一點(diǎn)后(上方改成41)就通過(guò)了。經(jīng)驗(yàn)教訓(xùn)是:下次定義數(shù)組時(shí)可以把它的大小稍微定義大一點(diǎn)(就不用想那么多了)。
還有一道題也是用到了遞歸的思想: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;
}
這道題做完后代碼運(yùn)行結(jié)果沒(méi)問(wèn)題,但在系統(tǒng)上面一直不通過(guò),一直找不到問(wèn)題所在。在查看大佬們的做法后發(fā)現(xiàn)原來(lái)我忽略了數(shù)組的溢出問(wèn)題,我原先是把數(shù)組c定義成int類(lèi)型,但后面的運(yùn)行結(jié)果明顯會(huì)超出int的范圍,于是我把int改成long long類(lèi)型,就成功通過(guò)了!