zoukankan      html  css  js  c++  java
  • 后知后觉 汉诺塔问题解法

    以前学东西不扎实,现在捡捡也好,汉诺塔本是C语言开门就学的东西,不过上课那会儿真心听不懂,直到大二了,才明白那是咋回事,我感觉的编程,真的是一张窗户纸,不过捅破要花时间理解吸收。起个不一样的名字是为了自己在百度可以搜索到。

    题目描述:有一个塔,塔内有A,B,C三个柱子。起初,A柱上有n个盘子,依次由大到小、从下往上堆放,要求将它们全部移到C柱上;在移动过程中可以利用B柱,但每次只能移到一个盘子,且必须使三个柱子上始终保持大盘在下,小盘在上的状态。要求编程输出移动的步骤。

    代码如下:

    #include<stdio.h>
    int move(char one,char two)//这个函数就是为了输出的结果直观显示出来,比如只有一个盘子时,输出a-->c. 就这样,把移动n个盘子每个步骤显示出来
    {
        printf("%c --> %c\n",one,two);
    }

    int hanoi(int n,char one,char two,char three)//是核心函数了
    {
        int move(char one,char two);
        if(n==1)//当只有一个盘子时,直接从a柱移到c柱就好,也是递归程序的一个出口
          move(one,three);
        else{   //盘子大于一时
            hanoi(n-1,one,three,two);//先借助c柱把上面的n-1个盘子从a柱全部移动到b柱
            move(one,three);           //这时a柱只剩下一个盘子了,移动到c柱即可
            hanoi(n-1,two,one,three);//将b柱剩下的n-1个盘子借助a柱移动到c柱,任务也就完成了
        }
    }
    int main()
    {
        int n;
        char a,b,c;
        while(scanf("%d",&n)!=EOF)//可以输入多组数据检验结果
           hanoi(n,'a','b','c');
        }
            
            
        

  • 相关阅读:
    转载 cglib代理和java代理
    解决流不能重复使用
    @RestController的方法中 路径参数带.(点号)配置
    Spring中application*的使用
    转载自用学习 侵权删
    转载学习 多线程中的内存模型和关键字
    转载 幂等的使用
    转载学习 关于线程池
    FastJSON 转换List<T> ,Map<T,T>泛型失败 处理方法
    quartz报错 Couldn't retrieve job because the BLOB couldn't be deserialized: null
  • 原文地址:https://www.cnblogs.com/laobanban/p/2941362.html
Copyright © 2011-2022 走看看