zoukankan      html  css  js  c++  java
  • 汉诺塔问题

    老生常谈的一个问题,仅作代码记录呵呵

    题目链接:http://ica.openjudge.cn/dg2/3/

    总时间限制: 1000ms  内存限制: 65536kB
    描述

    约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。 
    这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615
    这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。 

    假定圆盘从小到大编号为1, 2, ...

    输入
    输入为一个整数后面跟三个单字符字符串。
    整数为盘子的数目,后三个字符表示三个杆子的编号。
    输出
    输出每一步移动盘子的记录。一次移动一行。
    每次移动的记录为例如 a->3->b 的形式,即把编号为3的盘子从a杆移至b杆。
    样例输入
    2 a b c
    样例输出
    a->1->c
    a->2->b
    c->1->b
     1 #include <stdio.h>
     2 void fun(int n,char a,char b,char c);//将n个盘从a移动到b,移动过程借助c 
     3 int main(int argc, char *argv[])
     4 {
     5     int n;
     6     char A,B,C;
     7     scanf("%d %c %c %c",&n,&A,&B,&C);
     8     //printf("%d %c %c %c",n,A,B,C);
     9     fun(n,A,B,C);
    10     return 0;
    11 }
    12 void fun(int n,char a,char b,char c)//将n个盘从a移动到b,移动过程借助c
    13 {
    14     if(n>0)
    15     {
    16         fun(n-1,a,c,b);
    17         printf("%c->%d->%c
    ",a,n,b);
    18         fun(n-1,c,b,a);
    19     }
    20 }
  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/7240318.html
Copyright © 2011-2022 走看看