HDU2064-漢諾塔III:
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2064
參考博文:https://blog.csdn.net/narzisen/article/details/79772544
分析:假設有編號1......N的盤子,要將編號爲N的盤子移動的最右邊的柱子上,那麼首先將編號1.....N-1的盤子移動到最右邊的柱子上,需要buf[n-1]次,然後將編號爲N的盤子移動到中間柱子上,需要1次, 然後將最右邊的1.....N-1的盤子移動到最左邊柱子上,需要buf[n-1]次,然後將中間編號爲N的盤子移動到最右邊柱子上,需要1次,最後將最左邊柱子上移動到最右邊柱子上,需要buf[n-1]次,共需要buf[n]=3*buf[n-1]+2次。代碼如下:
#include <stdio.h>
int main ()
{
int n;
long long buf[36];
buf[0] = 0;
buf[1] = 2;
for(int i = 2; i < 36; i++)
{
buf[i] = 3*buf[i-1]+2;
}
while(scanf("%d", &n) != EOF)
{
printf("%lld\n", buf[n]);
}
return 0;
}
HDU:2077-漢諾塔IV
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2077
參考博文:https://blog.csdn.net/qq_41627235/article/details/82959765
代碼如下:
#include <stdio.h>
int main ()
{
int n, T;
long long buf[20];
buf[0] = 0;
buf[1] = 2;
for(int i = 2; i < 20; i++)
{
buf[i] = 3*buf[i-1]+2;
}
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%lld\n", buf[n-1]+2);
}
return 0;
}