题目链接: 汉诺塔问题VIII.

题目:

分析:

与汉诺塔VII类似 .

题目要求找出当前步数下的状态

我们知道:
N个圆盘的总移动次数
=2的n次方-1
=(2的(n-1)次方-1)+ 1 +(2的(n-1)次方-1);

所以我们可以采用递归运算的方式,

根据步数确定当前最大的圆盘所在的位置

当步数>=2的(n-1)次方时,圆盘在末位置
否则,圆盘在初位置

AC代码

package Two;import java.util.*;public class 汉诺塔VIII {public static ArrayList<Integer>[] arr=new ArrayList[3];public static void dfs(int n,long m,int from,int mid,int to){if(n<=0)return ;//为了避免出现精度不够的问题+0.000001if(m>=(long)(Math.pow(2, n-1)+0.000001)){arr[to].add(n);m-=(long)(Math.pow(2, n-1)+0.000001);dfs(n-1,m,mid,from,to);}else{arr[from].add(n);dfs(n-1,m,from,to,mid);}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int t=sc.nextInt();while(t-->0){int n=sc.nextInt();long m=sc.nextLong();for(int i=0;i<3;i++){arr[i]=new ArrayList<Integer>();}dfs(n,m,0,1,2);for(int i=0;i<3;i++){System.out.print(arr[i].size());for(int tt:arr[i]){System.out.print(" "+tt);}System.out.println();}}}
}

汉诺塔 问题 VIII相关推荐

  1. 杭电 汉诺塔问题总结

    看了一下杭电的各种汉诺塔问题,遇到些奇奇葩葩的小问题,也有很多很好的思想,比如最后一题,来来回回的颠倒很有意思.总结一下: Pro.ID 1207 :http://acm.hdu.edu.cn/sho ...

  2. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  3. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  4. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

  5. 技术图文:如何实现汉诺塔问题?

    背景 最近在辅导小孩们学习编程,在介绍函数递归时,最典型的就是汉诺塔问题了. 我在这里总结一下,以方便大家的学习. 汉诺塔问题源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在 ...

  6. 汉诺塔问题---小昝

    C语言 #include <stdio.h> void move(char A,char C){printf("%c ---> %c\n",A,C); }void ...

  7. 轻松理解汉诺塔问题(图解java描述)

    引言:(易于理解) 汉诺塔看似简单的几行代码,却蕴含着奇妙的算法.我从我个人学习的角度来说.我一开始理解了原理,但是编码不会编,这也就是所谓的眼高手低.多研究多在IDE(eclipse-java,VS ...

  8. 栈与队列5——汉诺塔问题(方案二)

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法二:非递归法 ...

  9. 栈与队列5——汉诺塔问题

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数. 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法一:主要分 ...

最新文章

  1. 【一语点醒梦中人】如何优雅地合并两个JSON对象 → Object.assign(a, b)和Object.assign({}, a, b)的区别
  2. c++中的数组和指针,引用
  3. Python基础语法毕业笔记-最简单的添加删除程序
  4. DPDK 网卡收包流程
  5. 【C语言函数】 - 库函数、自定义函数、函数参数、函数调用、嵌套调用链式访问、递归与迭代、缓冲区
  6. Linux内核第六节 20135332武西垚
  7. DisplayObjectContainer 属性和方法
  8. http协议(九)响应首部字段
  9. 2_用keras训练一个神经网络及不同优化和初始化对性能的影响分析
  10. 【Taro开发】-自定义导航栏NavBar(五)
  11. ps怎么对比原图快捷键_图片查看方式快捷键
  12. windwos11 小爱音箱链接上但是没有声音
  13. 简易的微信公众号管理平台使用指南
  14. UltraISO对光盘镜像的常用操作
  15. 技术决胜年----谈谈我2018年的新观念新思想
  16. 声卡驱动win7安装失败解决方法
  17. 计算机弹音乐百度百科,电子音乐合成器
  18. 某程序员哀叹:做码农真的很悲哀,有的35岁就没人要了
  19. 在阿里“救了八年火”的程序猿,这样讲述淘宝的技术进化史
  20. 大学生都说学计算机专业难,大学单身率很高的4个专业,男女比例严重失调,想谈恋爱太难了...

热门文章

  1. 文墨绘学:情绪的根源——家长的不合理观念
  2. 北航计算机学硕和专硕人数,2021考研报考人数公布!今年人数暴增了吗?
  3. signature=32d532a97f37c02b1149992578cf4af9,~(11)C-CFT PET功能显像Parkin基因缺陷少年型帕金森病患者脑多巴胺转运体...
  4. Dedecms 5.7 SP2后台广告管理处getshell
  5. elasticSearch-优化篇
  6. 基于3D Frangi滤波的血管强化方法(附代码python)
  7. java x的平方怎么打出来_java 中的输入输出
  8. Vue中如果关闭语法检查
  9. FreeRTOS+STM32L+ESP8266+MQTT协议传输温湿度数据,控制继电器到阿里云物联网平台
  10. 安卓android记单词软件