【C语言】汉诺塔问题

简介: 【C语言】汉诺塔问题

1.如果a柱只有一个盘子:直接把a柱上的盘子转移到c柱

20210121235846948.png

2.如果有a柱有一个盘子以上(核心的三个步骤):

2.1 //先把a柱上的n-1个盘子转移到b柱上

2.2 //再把a柱上剩下的一个最大的盘子转移到c柱上

2.3 //最后把b柱上的n-1个盘子全部转移到c柱上

(图解)假如a上有三个盘子

2021012200184460.png

#include<stdio.h>
void move(char,char);
void hanoi(int, char, char, char);
int main()
{
  int n = 0;
  printf("请输入a上盘子的数量:");
  scanf("%d", &n);
  printf("相应操作为\n");
  hanoi(n, 'a', 'b', 'c');
  // n个盘子 从a 经由b  到c
  return 0;
}
void move(char c1, char c2)
{
  printf("%c->%c\n", c1, c2);
}
void hanoi(int n, char x, char y, char z)
{
  if (n == 1)//如果才有一个盘子,直接把盘子从x拿到z上:
  move(x, z);
  else//如果有一个以上的盘子:
  {
  hanoi(n - 1, x, z, y);//第一步:将x上的n-1个盘子经由z转移到y上
  move(x, z);//第二部:将x上剩下的一个盘子转移到z上
  hanoi(n - 1, y, x, z);//第三部:将y上的n-1歌盘子经由x转移到z上
  }
}


运行结果:

20210122002210179.png

相关文章
|
C语言
c语言汉诺塔
c语言汉诺塔
112 0
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
81 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
6月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
5月前
|
C语言
【c语言】汉诺塔问题详解(c语言递归函数)
【c语言】汉诺塔问题详解(c语言递归函数)
63 0
|
6月前
|
C语言
汉诺塔————经典递归问题(C语言实现)
汉诺塔————经典递归问题(C语言实现)
138 0
|
6月前
|
C语言
【C语言】汉诺塔 —— 详解
【C语言】汉诺塔 —— 详解
|
C语言
C语言经典题目之 汉诺塔问题
C语言经典题目之 汉诺塔问题
79 0
|
6月前
|
C语言
C语言解决汉诺塔问题
C语言解决汉诺塔问题
62 0
|
6月前
|
算法 C语言
C语言汉诺塔数列(循环版,递归版)
C语言汉诺塔数列(循环版,递归版)
70 0
|
C语言
【C语言刷题】汉诺塔问题
【C语言刷题】汉诺塔问题
58 1