递归递推练习D汉诺塔系列1
2017-03-31 10:19
232 查看
Description
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系:
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
计算所有会产生的系列总数。
Input
包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数目N<30。
Output
对于每组数据,输出移动过程中所有会产生的系列总数。
Sample Input
Sample Output
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系:
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
计算所有会产生的系列总数。
Input
包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数目N<30。
Output
对于每组数据,输出移动过程中所有会产生的系列总数。
Sample Input
3
1
3
29
Sample Output
3
27
68630377364883
这道题一开始摸不着头脑的时候我选择多枚举几个前面三个的情况,发现系列数与3的T组次方数有关,可以得出递推公式f(n)=f(n-1)*3。下面是我的ac代码:
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int t,i; long long n, f[30]; cin>>t; while (t--) { cin>>n; f[1] = 3; for (i = 2; i <= n; i++) { f[i] = 3 * f[i - 1]; } cout<<f[n]<<endl; } return 0; }
相关文章推荐
- 递推递归练习 D - 汉诺塔系列1
- 递推递归练习D - 汉诺塔系列1
- ACM递推递归练习D汉诺塔系列1
- 递推递归练习D - 汉诺塔系列1
- 递推递归练习 D 汉诺塔系列1
- 递归递推练习 D 汉诺塔系列1
- 递归递推练习―D―汉诺塔系列1
- ACM-递归递推练习D-汉诺塔系列1
- 递推递归练习F - 计算组合数
- 递推递归练习 F 计算组合数
- 递归及递推问题系列之 不容易系列之(3)—— LELE的RPG难题 hdoj 2048
- 递推递归练习 J - 数学黑洞
- 递归及递推问题系列之 Number Sequence hdoj 1005
- 递推递归练习 B 王小二切饼
- 递推递归练习 -A 母牛问题 / / E .兔子繁殖问题
- 递推递归练习A - 母牛的故事
- 递推递归练习 A - 母牛的故事
- 汉诺塔系列专题(逐步理解递推递归)
- 递推递归练习 H - 三国佚事——巴蜀之危
- 递归及递推问题系列之 Tiling_easy version hdoj 2501