杭电oj1995——汉诺塔V(java实现)
正文之前,先说下做这题的心路历程(简直心累)
这是今天下午的第一道题
第一次看到题目标题——汉诺塔
内心OS:wc,汉诺塔诶,听名字就很难诶,没做过诶,肯定很难实现吧,不行,我得去看看讲解
然后就上b站,看了一遍汉诺塔递归的思路,然后又搜了博客,看了汉诺塔java实现的源码(此时一下午已经过去了……)
看完了之后
内心OS:现在肯定能通过了吧
然后就把汉诺塔的实现代码照着题目改了一下提交上去了,然后……TLE
想想也对啊,那么大数据一个个统计,肯定会超时
然后就在纸上写规律,写着写着,突然发现,好像连循环都不用??
就是这个:

直接输出对应次方就好了……
然后我整个人都傻了!!
就,循环都不用/捂脸
总结经验:这种有限定条件的益智类游戏,肯定有规律,按照它的流程来模拟肯定会超时!
下面是源码
模拟源码:(可以作为小游戏的源码,当然,要改东西)
static int count_of_disk = 0;
static int plate_number; static void hanoi(int n, Stack<Integer> stack_x, Stack<Integer> stack_y, Stack<Integer> stack_z){
if(n==0) return;
hanoi(n-1,stack_x,stack_z,stack_y);
if(stack_x.peek()==plate_number) count_of_disk++;
stack_z.push(stack_x.pop());
hanoi(n-1,stack_y,stack_x,stack_z);
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
while(count--!=0){
int all_plate = sc.nextInt();
plate_number = sc.nextInt();
Stack<Integer> stack_x = new Stack<>();
Stack<Integer> stack_y = new Stack<>();
Stack<Integer> stack_z = new Stack<>(); for(int i = all_plate;i>0;i--){//initialize
stack_x.push(i);
} hanoi(all_plate,stack_x,stack_y,stack_z);
System.out.println(count_of_disk);
count_of_disk = 0; }
下面是ac源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
while(count--!=0){
int all_plate = sc.nextInt();
int no = sc.nextInt();
System.out.println((long)Math.pow(2,all_plate-no));
}
}
对……你没看错……就是这么简单……已经ac了……
希望对大家有所帮助
以上
杭电oj1995——汉诺塔V(java实现)的更多相关文章
- 汉诺塔III 汉诺塔IV 汉诺塔V (规律)
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDUOJ---(1995)汉诺塔V
汉诺塔V Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI
汉诺塔 汉诺塔II hdu1207: 先说汉若塔I(经典汉若塔问题),有三塔.A塔从小到大从上至下放有N个盘子.如今要搬到目标C上. 规则小的必需放在大的上面,每次搬一个.求最小步数. 这个问题简单, ...
- HDOJ 1995 汉诺塔V
Problem Description 用1,2,-,n表示n个盘子,称为1号盘,2号盘,-.号数大盘子就大.经典的汉诺塔问 题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔 ...
- 数据结构--汉诺塔递归Java实现
/*汉诺塔递归 * 1.将编号0-N-1个圆盘,从A塔座移动到B上面 * 2.将编号N的1个圆盘,从A移动到C上面 * 3.最后将B上面的N-1个圆盘移动到C上面 * 注意:盘子的编号从上到下1-N ...
- 题解报告:hdu1995汉诺塔V(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1995 Problem Description 用1,2,...,n表示n个盘子,称为1号盘,2号盘,. ...
- hdu1995 汉诺塔V
可以直接把前K-1个罗盘全部忽略了,因为移动前K-1个罗盘不会影响第K个. 也就是相当于只移动剩下的n-k-1个罗盘,当只移动第k个罗盘时,f(k)=1;当要哟东第k个和第k+1个时,就必须先把第k个 ...
- 汉诺塔问题java实现
问题描述 三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 解题思路 使用递归算法进行处理,实在理不 ...
- HDU 1995 汉诺塔V (水题)
题意:.. 析:2^n-i 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <c ...
随机推荐
- Java源码系列2——HashMap
HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...
- linux---基础学习
学习使用linux 偶然间看到一篇介绍linux的使用,于是看了看,整体看完,虽然看的有些懵✒,但还是坚持看完了基础部分,并做了一些摘要. man页面所属的分类标识 常用的是分类1和分类3 (1).用 ...
- 洛谷题解 P1134 【阶乘问题】
原题传送门 题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600 12的阶乘最右边的非零位为6. ...
- Qt中MySQL数据库的操作例程
数据库连接不成功时,要将libmysql.dll放到C:\Qt\Qt5.11.0\5.11.0\mingw53_32\bin和C:\Qt\Qt5.11.0\5.11.0\msvc2017_64\bin ...
- @RequestBody 和 @RequestParam(“test”) 的区别与联系
@RequestBody @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的):GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用 ...
- Android studio中修改xml文件无效问题
昨天遇到的这个问题,在修改布局xml文件后保存,但运行时布局却并没有被修改,也就是说我的修改无效,今天参照了这篇文章中的方法终于解决了: https://blog.csdn.net/l_o_s/art ...
- 剑指offer-面试题30-包含min函数的栈-栈
/* 题目: 定义栈的数据结构,实现一个能够得到栈的最小元素的min函数. */ /* 思路: 错误思路:每次保存当前最小的元素,如果当前最小元素弹出,最小元素是谁? 正确思路:两个栈,一个栈保存数据 ...
- LTC
LTC 即 L2C,Leads To Cash,从线索到现金的企业运营管理思想,是以企业的营销和研发两大运营核心为主线,贯穿企业运营全部流程,深度融合了移动互联.SaaS技术.大数据与企业运营智慧,旨 ...
- Maven修改test/rsource的output folder报错Test source folder 'src/test/java'... is not also used for main s
eclipse新建maven项目时候,只出来三个文件夹,然后大都督手动添加了缺失的src/test/resource 的文件夹,最后想修改一下 Output folder的路径为 (原来是 d ...
- 暂停后保存sql server profiler的跟踪结果