问题描述:求n阶汉诺塔第x步移动策略

开始的时候以为是汉诺塔的递归模拟,然后果断超时了。由于汉诺塔步骤1和步骤3的操作数相同,所以这里用二分查找来加速。

n阶汉诺塔需要移动2^n-1次,所以mid=(2^n-1+1)/2=2^n-1,

当step>mid时,step-=mid,转化成n-1阶汉诺塔。

#include<stdio.h>long long step,f[64];void bsHanoi(int n,int a,int b,int c)
{long long mid=f[n-1];if(step==mid){printf("%d %d %d\n",n,a,c);return ;}if(step<mid)bsHanoi(n-1,a,c,b);else{step-=mid;bsHanoi(n-1,b,a,c);}}int main()
{int i,t;for(i=1,f[0]=1;i<64;i++)f[i]=f[i-1]<<1;scanf("%d",&t);while(t--){int n;scanf("%d%I64d",&n,&step);bsHanoi(n,1,2,3);}return 0;
}

递归汉诺塔模版:

void hannoi (int n, char A, char B, char C)    //A移动到C,借助B,
{if (n == 1){cout << "Move disk " << n << " from " << A << " to " << C << endl;}else{hannoi (n-1, A, C, B);cout << "Move disk " << n << " from " << A << " to " << C << endl;hannoi (n-1, B, A, C);}
}

转载于:https://www.cnblogs.com/zhen94/p/3555004.html

HDU 2511二分+汉诺塔相关推荐

  1. 【HDU 1997】汉诺塔VII

    汉诺塔VII(题目链接) 思路 本文参考了下列文章 汉诺塔的回顾和深刻 汉诺塔VII 首先用数组将每一个样例的状态存储 数组的每一行存储一个柱子的状态 每一行的第0列存储柱子上盘子的数目 其后从下到上 ...

  2. 汉诺塔 X HDU - 2511

    题目: 1,2,-,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],-,a[n]. a[1]=n,a[2]=n-1,-,a[n] ...

  3. 汉诺塔III HDU - 2064

    汉诺塔III HDU - 2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的 ...

  4. 汉诺塔问题 hdu 2064 hdu1997

    hdu 1997汉诺塔 题目分析: 转自:http://lcc3536.blog.163.com/blog/static/132469917201132283640123/ 1)  最初我们要判断一下 ...

  5. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  6. 二分查找、分治算法——汉诺塔问题

    一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...

  7. HDU——2064汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. HDU 2064:汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. hdu 2064汉诺塔III 递推

    汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...

  10. HDU 1207 汉诺塔II (递推)

    经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...

最新文章

  1. 程序员该如何抉择公司?
  2. 智源x清华开源FastMoE,万亿AI模型基石
  3. RMAN backup validate database on databases in noarchivelog mode
  4. python version 3.4 required_Python version 3.3 required, which was not found in the registry
  5. C语言标准数学函数库math.h之常用函数介绍
  6. Apache启动过程(PHP_MINIT_FUNCTION的调用)
  7. Ranger-Sqoop2插件安装
  8. Mounting A Windows Share On AIX Using CIFS
  9. “寒门状元之死”文章引热议 京东徐雷:三流文学作品 多看书吧
  10. oracle创建索引后sqlldr导入错误
  11. RGB图像任意角度旋转
  12. 2019-07-11 nginx 下网页显示乱码
  13. maven私服搭建及应用
  14. RecyclerView-- 侧滑删除和拖动排序
  15. vue前端项目打包并且在服务器上部署过程
  16. java基于ssm医院病历管理系统
  17. 交换机端口tagged与untagged
  18. 影响RAID 0性能的因素
  19. 如何保存Win10壁纸
  20. Python串口异步通信

热门文章

  1. Flink 在众安保险金融业务的应用
  2. Flink 在快手实时多维分析场景的应用
  3. 刚刚!中科院主导的国产编程语言木兰负责人回应了!承认32位机器上,是基于Python二次开发!...
  4. Python数据分析、挖掘常用工具
  5. 移动App 网络优化细节探讨
  6. 单按钮启停电路实物图_什么是电路的主回路?什么是控制回路?它们之间有什么区别?...
  7. jdk32位安装包下载_MySQL 8.0.19安装图文详解!手把手教会您从下载到安装成功
  8. 类图中表达总体与局部的关系_软件工程测试题3
  9. python表格数据过滤复制到另外一个表格
  10. JQuery 四个常用的DOM操作获得内容 - text()、html()、value 以及 val() ;取属性值attr()----前三个有回调函数