• 汉罗塔汉洛塔c++,看不懂ni打我


    汉罗塔汉洛塔c++,看不懂ni打我


    大哥大姐手下留情 别打我!!!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GC9f81Hm-1669391569678)(C:\Users\ASUS\Desktop\汉罗塔 .在这里插入图片描述

    Input
    		第一行为一个正整数n
    
    Output
    		若干行,表示将n个金片从A搬到C的全过程。
    		格式见样例。
    
    		Sample Input 1
    			1:A==>C
    
    		Sample Output 3
                1:A==>C
                2:A==>B
                1:C==>B
                3:A==>C
                1:B==>A
                2:B==>C
                1:A==>C   
    
    Hint
    		n ≤ 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    总之就是 (1. 2. 3.对应下面c++代码执行步骤)

    先复杂问题简单化,n层无法解决就把n先放着不管,解决n-1层
    要解决n-1层,就把n-1层先放着不管…然后把1层解决了,然后解决2层…
    然后解决问题。ABC(起始柱,备用柱,目标柱)随着递归调用,三个柱子的起始属性会发生变化。

    1.n层先不动,等待n-1层全部移动到备用柱上 (看了下面再体会这一句)
    2.然后将n层移动到目标柱上
    3.此时n-1层还在备用柱上 需要把备用柱上的n-1柱子全部移动到 目标柱
    要把n-1层移动到目标柱上

    1.n-1层不要动,等待n-2层全部移动到备用柱上 (体会一下这里,柱子不一样喔)
    2.然后将n-1移动到目标柱上
    3.此时n-2还在备用柱上 需要把备用柱上的n-2个柱子全部移动到 目标柱上



    .

    要把2层移动到目标柱上
    1.第2层不要动,将第一层全部移动到备用柱上
    2.然后将第2层移动到目标柱上
    3.将第一层从备用柱上 移动到目标柱上,结束

    *****注意体会:每次递归调用的时候 A B C 三个柱子属性(起始柱 备用柱 目标柱) 一直在变换换 *****
    看代码

    
    #include
    #include
    #include
    using namespace std;
    
    void han1(int n, string A, string B, string C) {
        // 只有一层的时候直接从 a==>c
    	if (n == 1) {
    		cout<" << C << endl;
    	}else {// 有两层以上的时候
            /*1. 除底层 之外的 所有层数(n-1) 继续进行递归,直到n-1=1时候该函数递归结束
            	 递归结束后n-1层会全部移动到 中间柱B上
            */
    		han1(n - 1, A, C, B);
    
    		/*2. 经过1.操作后 此时n-1个元素已经全部移动到b柱上 
    			此时A柱上只有最底层元素n 我们直接把他移动到 c柱子上
    		*/ 
    		cout<" << C << endl;
            
    		/*3.经过1.和2.操作 此时n-1层已经移动到b柱中,n移动到A柱上
    			此时的需要把 b柱上的 n-1个元素全部移动到c柱中完成移动
    			所以再次递归调用
    		*/ 
    		han1(n - 1, B, A, C);
    	}
    }
    int main() {
        // n表示有几层汉罗塔
    	int n;
    	cin>>n;
        // 调用递归函数
    	han1(n, "A","B","C");
    	system("pause");
    	return 0;
    }
    
    • 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
    • 35
    • 36
    • 37

    我是傻逼

  • 相关阅读:
    io多路复用:select、poll和epoll
    01背包问题 : 二维dp数组 + 图文
    第28章_瑞萨MCU零基础入门系列教程之基于面向对象的工程结构
    Xilinx Zynq-7000系列FPGA任意尺寸图像缩放,提供两套工程源码和技术支持
    SpringCloud入门概述;微服务入门概述
    基于matlab如何判断闰年方法
    vue中的mixin(局部混入、全局混入)
    【Java】抽象类案例
    网络安全应急响应操作流程-打好应急响应保卫战
    OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具
  • 原文地址:https://blog.csdn.net/qq_47658204/article/details/128046483