徒手写汉诺塔

加班酱油看到园中略有汉诺塔的文章,不由得想起大学王吊老师给我们上的c语言课啊,其中有汉诺塔这一部分.隐隐记得一点点,但是下面代码肯定是徒手写出(这里和标题完全属于装B类型,突然想到徒手XXX,所以就把题目写得很装B.徒手撸一把,徒手斗歹徒,徒手泡妹妹.),突然感觉代码好短,可能是以前学校题目就差不多这些样子吧.不能太长了.

当然在写这个过程中还是有bug的.我去中间有一点改动,就是打印的地方.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.Fun(‘a‘, ‘c‘, 3, ‘b‘);
            Console.ReadLine();
        }

    }

    /// <summary>
    /// A,B,C 从A到C
    /// </summary>
    class A
    {
        //从a上把n盘子搬到c上,通过b来搬
        public void Fun(char a, char c, int n, char b)
        {
            if (n == 1)
            {
                Console.WriteLine("从{0}上搬1个盘子到{1}上", a, c);
            }
            else if (n > 1)
            {
                Fun(a, b, n - 1, c);
                Fun(a, c, 1, ‘*‘);
                Fun(b, c, n - 1, a);
            }
            else return;
        }
    }

}

总结

  练手,防子大脑变瓜.这个递归思想还是很简单的,要把n个盘子从a移动到c上面,借住b来完成,那么就要完成把n-1个盘子从a移到b,通过c,然后把a上的最后一个称到c,再把b上的盘子移动到c上面通过a来完成.所以分下来就是主要的三句.而n==1的时候就是移动,所以打印出来即可.

时间: 2024-12-28 16:53:27

徒手写汉诺塔的相关文章

几年前做家教写的C教程(之四专讲了指针与汉诺塔问题)

C语言学习宝典(4) 指针:可以有效的表示复杂的数据结构,能动态的分配动态空间,方便的使用字符串,有效的使用数组,能直接处理内存单元 不掌握指针就没有掌握C语言的精华 地址:系统为每一个变量分配一个内存单元,内存区的每一个字节有一个编号,这就是“地址” 指针的定义; 基类型 * 指针变量名 例如 int *pointer; 可以使用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量. 例1  通过指针变量访问整形变量 /******************* 功能:通过指针变量访

汉诺塔略写

#include<stdio.h> void hanoi(int n,char A,char B,char C)/*n为积木的数量,ABC为三根柱子,A是起点,B是辅助点,C是终点*/ { if(n==1) { printf("%c -> %c\n",A,C);/*只有一个盘子就直接A移动到C就好了*/ } else { hanoi(n-1,A,C,B);/*把A中除了底部那块积木看成一个整体为n-1块,绕过C柱放到B*/ printf("%c ->

【数据结构】2、汉诺塔

/* *功能:假设有3个塔座x y z,在x上插有n个直径大小各不相同.从小到大编号为1 - n的圆盘,要求将x轴上的n个圆盘移动到z轴并按同样顺序排列,移动圆盘须遵循以下规则: 1).每次只能移动一个圆盘: 2).圆盘可插在x y z中的任一塔座上: 3).任何时刻不能将一个较大的圆盘压在较小的圆盘上: *文件:hanoi.cpp *时间:2015年7月6日20:22:29 *作者:cutter_point */ #include <iostream> using namespace std

hdu1207 汉诺塔II 简单dp

本文出自:http://blog.csdn.net/svitter 题意:汉诺塔,多了一根柱子,问你寻找最快的移动次数. dp [ n ] = dp [ n - j ] * 2 + pow( 2, j ) - 1; 就是把j个汉诺塔移到一根上dp[ n - j ],然后就是普通的汉诺塔问题,即2^n - 1次移动, 然后把剩下的移动过去dp [ n - j ]. 注意pow(2, j )可能超出long long int范围.写二的次方的时候也可用移位算法. #include <iostream

JAVA——汉诺塔

大家还记得某年春晚小品那个把大象放冰箱需要几步吗? 今天,我准备写的是汉诺塔,有三个魔法石柱,分别:诚实.勇敢.正直.其中有一个石柱上从大到小,从地向上依次排放着四个魔法圆环,需要将那四个魔法圆环分别按照大的上面放小的,不可以在小的上面放大的的:需要几步? import java.util.Scanner; public class ssr { static int step = 0; public static void main(String[] args) { //汉诺塔 hanio(4,

汉诺塔递归解决方法经典分析

一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔.庙宇和众生也都将同归于尽. 虽然这只是一个传说,但也给我们提出了一个问题,

汉诺塔初级问题(递归实现)

汉诺塔 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 汉诺塔(又称河内塔)问题是印度的一个古老的传说. 开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A.B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面. 僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了. 聪明的

【C语言】汉诺塔问题

之前遇见这个问题,非常费劲地理解了,并写出代码,然后过段时间,再遇见这个问题,又卡住了,如此反反复复两三次,才发现自己对递归的理解依然很肤浅.今天无聊,重温<算法:c语言实现>一书,又遇见了这个问题,心头一紧,担心要费些时间才能写出代码,没想到的是,再理解了书中对递归的定义,蒙住源代码动手写,发现很快就写出来了,甚至都没有费力去模拟整个汉诺塔移动过程,只是根据递归的要领(数学归纳法)分析了一下问题,便得出了一个递归形式,照此写代码,竟然没错.由此也醒悟到,很多时候,用递归写代码并不难,但却常常

【Python学习】Python解决汉诺塔问题

参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! 信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉 学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了 汉诺塔的图解递归算法 一.起源: 汉诺