"4147:汉诺塔问题(Hanoi)" 总时间限制: 1000ms 内存限制: 65535kB 描述 一、汉诺塔问题 有三根杆子A,B,C。A杆上有N个(N 1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。 提示:可将圆盘临时 ...
分类:
其他好文 时间:
2019-02-05 22:21:00
阅读次数:
221
首先我们来求第m次移动的盘子号数,先列出当m比较小可以直接观察的前几项 m : 1、2、3、4、5、6、7、8、9、10 id : 1、2、1、3、1、2、1、4、1、2 很容易联想到树状数组的lowbit,这题的id就是lowbit(m)在二进制中的编号。 for (id = 1; (m & 1) ...
分类:
其他好文 时间:
2019-02-03 12:51:48
阅读次数:
170
对于一些算法问题,求次数,种类数(答案就是一个具体的数值)这些,如果有封闭形式就可以直接解,就不用去编码大量的代码了。那我们看一个例子吧。 汉诺塔移动次数: 我们以前是求汉诺塔的移动方式,那现在要求移动多少次,那该怎么做呢?我们可以先看汉诺塔的移动次数递归式 f(n) = 2f(n-1)+1 。那是 ...
分类:
其他好文 时间:
2019-02-01 13:08:25
阅读次数:
213
需求: 求出每一级的数量,但是父级+子级的所有数量。 比如 第一级本身数量为1 而子级是2 ,那么相加就是3,但是2级还有3级,就需要再加上3级。依次类推到最后一级数量之和就是这个分类的总数量。 实现的思路: 1:我们需要找到自身的数量. 2.1:我们找到自身的下一级所有数量相加 ,返回数量. 2. ...
分类:
其他好文 时间:
2019-01-30 18:25:29
阅读次数:
122
递归算法虽然容易理解,但我们可能时常忘记使用它。我就只记得算法课上老师讲过的场景:斐波那契数列,汉诺塔这两个例子。偶尔看到b站上一个C语言视频里面用递归求解进制转换的例子,突然之间恍然大悟,想着记录下来。 下面是一个求解二进制的程序代码 ...
分类:
其他好文 时间:
2019-01-26 23:48:50
阅读次数:
305
题目大意:给定一个四个柱子的汉诺塔,N 个盘子,求最少多少步移动到另一个柱子上。 题解:$f[n]=min(2 f[i]+d[n i])$,其中 $d[i]$ 为汉诺三塔最小移动次数。M 塔同理。 代码如下 cpp include using namespace std; const int max ...
分类:
其他好文 时间:
2019-01-21 20:08:02
阅读次数:
159
汉诺塔问题:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,求至少需要多少次移动。 我们首先假设n=1,那么move(n)=1,因为这时候只需要从A->C便可以。接下来假 ...
分类:
其他好文 时间:
2019-01-11 20:09:41
阅读次数:
161
#include<stdio.h>int main(){ void hanoi(int n,char one,char two,char three); int m; printf("Inout the numbers of disks:"); scanf("%d",&m); printf("The ...
分类:
其他好文 时间:
2019-01-08 19:20:59
阅读次数:
202
#兔子问题用递归法解决 def factorial(n): if n0: n3=n2+n1 n1=n2 n2=n3 n-=1 return n3 result=fab(40) if result !=-1: print("总共有%d对小兔子" %result) #汉诺塔解决方法 def hanor(... ...
分类:
其他好文 时间:
2019-01-08 19:14:20
阅读次数:
227