zoukankan      html  css  js  c++  java
  • C#实现汉诺塔问题

    汉诺塔的由来:
    汉诺塔是源自印度神话里的玩具。
    上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。
    上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
    有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今还在一刻不停地搬动着圆盘。
    汉诺塔与宇宙寿命:
    如果移动一个圆盘需要1秒钟的话,等到64个圆盘全部重新落在一起,宇宙被毁灭是什么时候呢?
    让我们来考虑一下64个圆盘重新摞好需要移动多少次吧。1个的时候当然是1次,2个的时候是3次,3个的时候就用了7次......这实在是太累了
    1个圆盘的时候 2的1次方减1
    2个圆盘的时候 2的2次方减1 
    3个圆盘的时候 2的3次方减1
    4个圆盘的时候 2的4次方减1 
    5个圆盘的时候 2的5次方减1 
    ........
    n个圆盘的时候 2的n次方减1
    也就是说,n=64的时候是(2的64次方减1)次。
    因此,如果移动一个圆盘需要1秒的话,
    宇宙的寿命=2的64次方减1(秒)
    用一年=60秒x60分x24小时x365天来算的话,大约有5800亿年吧。
    据说,现在的宇宙年龄大约是150亿年,还差得远呢。
    汉诺塔问题在数学界有很高的研究价值,
    而且至今还在被一些数学家们所研究,
    也是我们所喜欢玩的一种益智游戏,
    它可以帮助开发智力,激发我们的思维。
    汉诺塔的C语言实现
    #include"stdio.h"
    void move(char x,char y)
    {
     printf("%c-->%c/n",x,y);
    }
    void hanoi(int n,char one ,char two,char three)
    {
     if(n==1) move(one,three);
     else{
      hanoi(n-1,one,three,two);
      move(one,three);
      hanoi(n-1,two,one,three);
     }
    }

  • 相关阅读:
    5 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之生产环境下drbd裂脑处理
    elk系列8之logstash+redis+es的架构来收集apache的日志
    elk系列7之通过grok分析apache日志
    elk系列6之tcp模块的使用
    elk系列5之syslog的模块使用
    elk系列4之kibana图形化操作
    elk系列3之通过json格式采集Nginx日志
    elk系列2之multiline模块的使用
    Docker探索系列2之镜像打包与DockerFile
    elk系列1之入门安装与基本操作
  • 原文地址:https://www.cnblogs.com/gc2013/p/3918764.html
Copyright © 2011-2022 走看看