程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • 操作系统

  • AgLearn

  • 计算机网络

  • 数据结构

    • 线性表
    • 概述
    • 二叉树
    • 塔诺牌问题
  • 计算机组成原理

  • 基础
  • 数据结构
yuadh
2022-03-24

塔诺牌问题


#include <stdio.h>
// 汉诺塔问题是指:一块板上有三根针 A、B、C。
// A 针上套有 64 个大小不等的圆盘,按照大的在下、小的在上的顺序排列,
// 要把这 64 个圆盘从 A 针移动到 C 针上,每次只能移动一个圆盘,
// 移动过程可以借助 B 针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。
// 从键盘输入需移动的圆盘个数,给出移动的过程。

// 总体思想是,将 A 柱上的(n-1)个盘移动到 B 柱
// 然后将 A 柱上的最后一个盘移动到 C 柱
// 然后将 B 柱的(n-2)个盘移动到 C 柱 
// 总结:此思想是根据最小项推至得到的归纳公式总结的 具体实现如下

// 程序的具体实现

void moveTo(char p_f,char p_s){
    printf("柱子%c最上层盘移动到柱子%c\n",p_f,p_s);
}
void P_Runing(char A,char B,char C,int n){
    if(n==1){//如果只有一个盘需要移动直接将 A 柱移动到 B 柱
        moveTo(A,C);
    }else{
        P_Runing(A,C,B,n-1);//将 A 柱(n-1)个盘移动到 B 柱
        moveTo(A,C); //将剩余 A 柱的一个盘移动到C
        P_Runing(B,A,C,n-1);//将 B 柱的(n-1)个盘移动到 C 柱
    }
}

int main(){
    char A = 'A',B = 'B',C='C';
    int n;
    scanf("%d",&n);
    P_Runing(A,B,C,n);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
二叉树
计算机系统概述

← 二叉树 计算机系统概述→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×