zoukankan      html  css  js  c++  java
  • Hanoi塔问题

    (n阶Hanoi塔问题)假设有三个分别命名为A、B、C的塔座,在塔座A上插有n(n<20)个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将A轴上的n个圆盘移至塔座C上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则: 1)每次只能移动一个圆盘; 2)圆盘可以插在A、B、C中的任一塔座上; 3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 请通过编程来打印出移动的步骤.

    输入

    只有一组输入数据.输入数据N(;表示在开始时A塔座上的盘子数),当输入0时程序结束.

    输出

    输出移动的步骤.如"A-->C","A-->B"等.每两的步骤之间有三个空格隔开,每输出5个步骤就换行.详细的见Sample Output.

    样例输入

    5
    2
    0

    样例输出

    A-->C A-->B C-->B A-->C B-->A 
    B-->C A-->C A-->B C-->B C-->A 
    B-->A C-->B A-->C A-->B C-->B 
    A-->C B-->A B-->C A-->C B-->A 
    C-->B C-->A B-->A B-->C A-->C 
    A-->B C-->B A-->C B-->A B-->C 
    A-->C 
    A-->B A-->C B-->C 

    #include<stdio.h>
    #include<math.h>
    int i=0,m;
    void move(char x,char y)
    {
        printf("%c-->%c   ",x,y);
        i++;
        if(i%5==0)
            printf("
    ");
    }
    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);
        }
    }
    main()
    {
          do
        {   i = 0;
            scanf("%d",&m);
            if(m==0)
            break;
            hanoi( m,'A','B','C');
            printf("
    ");
        }while(m!=0);
    }
  • 相关阅读:
    CSS 选择器
    HTML lable和fieldset
    html image和表格
    HTML a标签
    html 提交后台的标签
    HTML INPUT系列使用
    HTML内标签、换行
    HTML 头部详解
    单例模式
    const 指针的三种使用方式
  • 原文地址:https://www.cnblogs.com/Lazy-Cat/p/9838293.html
Copyright © 2011-2022 走看看