HDU 1995 汉诺塔V 和 HDU 1996 汉诺塔VI
来源:互联网 发布:etl数据清洗工具 编辑:程序博客网 时间:2024/05/17 19:17
题目:
Description
用1,2,...,n表示n个盘子,称为1号盘,2号盘,...。号数大盘子就大。经典的汉诺塔问
题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于
印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小
顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱
子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。我们
知道最少需要移动2^64-1次.在移动过程中发现,有的圆盘移动次数多,有的少 。 告之盘
子总数和盘号,计算该盘子的移动次数.
题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于
印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小
顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱
子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。我们
知道最少需要移动2^64-1次.在移动过程中发现,有的圆盘移动次数多,有的少 。 告之盘
子总数和盘号,计算该盘子的移动次数.
Input
包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数目N(1<=N<=60)和盘
号k(1<=k<=N)。
号k(1<=k<=N)。
Output
对于每组数据,输出一个数,到达目标时k号盘需要的最少移动数。
Sample Input
260 13 1
Sample Output
5764607523034234884
首先,问题的答案肯定是关于n-k的一个函数。
于是接下来我们只需要考虑k=1的情况。
规律实在太明显了,我就不扯什么原理了。
答案是2^(n-k)
代码:
#include<iostream>using namespace std;int main(){int t, n, k;long long a = 1;cin >> t;while (t--){cin >> n >> k;cout << (a << (n - k)) << endl;}return 0;}
注意,1<<(n-k)会溢出,所以需要long long的常数
题目:
Description
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于
发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱
子从下往上的大小仍保持如下关系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
计算所有会产生的系列总数.
发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱
子从下往上的大小仍保持如下关系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
计算所有会产生的系列总数.
Input
包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数
目N<30.
目N<30.
Output
对于每组数据,输出移动过程中所有会产生的系列总数。
Sample Input
313 29
Sample Output
32768630377364883
代码:
#include<iostream>using namespace std;int main(){/*long long a = 3;for (int i = 1; i < 30; i++){cout << a << ",";a = a * 3;}*/long long l[29] = { 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467, 3486784401, 10460353203, 31381059609, 94143178827, 282429536481, 847288609443, 2541865828329, 7625597484987, 22876792454961, 68630377364883 };int t, n;cin >> t;while (t--){cin >> n;cout << l[n - 1] << endl;}return 0;}
1 0
- HDU 1995 汉诺塔V 和 HDU 1996 汉诺塔VI
- HDU 1995 汉诺塔V && HDU 1996 汉诺塔VI &&HDU 2077 汉诺塔IV【快速幂】
- hdu 1995 汉诺塔V
- hdu 1995 汉诺塔V
- hdu 1995 汉诺塔V
- HDU 1995 汉诺塔V
- hdu 1995 汉诺塔V
- hdu 1995 汉诺塔V
- HDU 1995 汉诺塔V
- HDU 1995 汉诺塔V
- hdu 1996 汉诺塔VI
- hdu 1996 汉诺塔VI
- HDU 1996汉诺塔VI
- hdu 1996 汉诺塔VI
- HDU 1996 汉诺塔VI
- HDU 1996 汉诺塔VI
- HDU ACM 1995 汉诺塔V
- HDU ACM 1996 汉诺塔VI
- 移动端H5图片上传的那些坑
- C语言 指针与数组
- JNI/NDK开发指南(三)---Android NDK开发Crash错误定位
- window.open()
- 揭秘4大炒房模式 房价就是这么被炒起来的
- HDU 1995 汉诺塔V 和 HDU 1996 汉诺塔VI
- css3 box-sizing属性
- 郑轻OJ/ ZZULIOJ 1053 正弦函数
- Android 应用启动速度优化之 Systrace 的使用
- Volley之Get
- ionic之搜索框浮动在轮播图片上
- HDU-5752 Sqrt Bo(处理字符串)
- BCNF范式(匡正的第三范式)、第四范式和第五范式
- Linux下段错误的原因以及调试方法