题目描述

给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。



现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;

任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

分析

思路简单一点,汉诺双塔=汉诺塔×2,OK,那么就是求两倍的汉诺塔,思路是一样的。

我们做一个比较简单的递推,要把2N个盘从A移动到B上,就先移动2(N-1)个到C上,在移2个到B上。

再把2(N-1)个移到B上,因此F(N)=2*F(N-1)+2

F(1)=2,易得F(N)=2^(N+1)-2

又因为N最大到200,2的201次方太大了,因此需要使用高精度。

AC代码

var
a:array[1..100] of integer;
n,i,j:integer;
begin
fillchar(a,sizeof(a),0);
readln(n);
a[1]:=1;
for i:=1 to n+1 do
begin
for j:=1 to 100 do a[j]:=a[j]*2;
for j:=2 to 100 do
begin
a[j]:=a[j]+a[j-1] div 10;
a[j-1]:=a[j-1] mod 10;
end;
end;
j:=100;
while a[j]=0 do dec(j);
a[1]:=a[1]-2;
for i:=j downto 1 do write(a[i]);
end.

最新文章

  1. ReportView报表开发记录(一)
  2. spring 3.1 配置 JCR 303 Bean Validation
  3. ios 区域检测 使用coreLocation
  4. mysql导入sql文件
  5. ajax练习习题二三级联动
  6. Moebius实现Sqlserver集群~介绍篇
  7. REST和JAX-RS相关知识介绍
  8. 轻松搞定Linux端口转发
  9. hi3531 SDK 编译 uboot, 修改PHY地址, 修改 uboot 参数 .
  10. android分包方案
  11. C语言中 sscanf 的用法
  12. Python之路【第七篇】:Python装饰器
  13. weblogic patch log显示
  14. SpringBoot 启动概述
  15. Vue 组件化
  16. np.linespace使用方法
  17. 转:fastText原理及实践(达观数据王江)
  18. 如何更改myecelipse、eclipse的Project Explorer的背景颜色
  19. 学习node js 之微信公众帐号接口开发 准备工作之三
  20. Apache Ant和Apache Maven的区别

热门文章

  1. OpenFeign远程调用原理
  2. C语言数组初始化方式
  3. oracle数据库归档日志量陡增分析
  4. ORACLE中的PL/SQL
  5. 京东 Vue3 组件库支持小程序开发啦!
  6. theUnforgiven——项目冲刺
  7. 把新建的vue项目上传到码云
  8. 用户RFM模型及应用
  9. Kubernetes在生产环境中的一些讨论
  10. SpringBoot集成websocket发送后台日志到前台页面