首页 > 其他分享 >汉诺塔问题和青蛙跳台阶问题(c语言)

汉诺塔问题和青蛙跳台阶问题(c语言)

时间:2024-10-19 17:17:45浏览次数:9  
标签:int move Hanoi 青蛙 问题 汉诺塔 pos2 pos3 pos1

 

285b9f52d76e44c4a4d7c3838a19ab5d.png

这俩道题都是利用到了函数递归的思想,其中汉诺塔问题较难理解,青蛙跳台阶则较简单

汉诺塔问题

题述:

设有三根柱子分别时A,B,C,在A柱子上放着n个盘子,每个盘子大小不一样,从下往上盘子大小依次减小,要求将A柱子上的盘子移动到C柱,且不改变盘子顺序(由大往小排序)。

规则:

1.一次只能移动一个盘子

2.盘子可以放在任意一个柱子上

3.盘子由大到小排序

 

图解:当n=2时,

移动顺序:A->B,A->C,B->C

b335b820c15b4811a0904f98eb6d9295.png

当n=3时

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

f25b778770d34347882010eb9421a5ba.png

 

思路:可以用函数递归来解决汉诺塔问题

代码插入

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void move(char pos1, char pos2)
{
	printf(" %c->%c ", pos1, pos2);

}
//n是汉诺塔的层数
//pos1起始位置
//pos2中转位置
//pos3目的位置

void Hanoi(int n,char pos1,char pos2,char pos3)
{
	if (n == 1)
	{
		move(pos1, pos3);
		//这个move(pos1,pos3)对应的Hanoi中的pos1,pos3
	}
	else
	{
		//将n-1杆子上的东西从A经过中转杆C移动到B上
		Hanoi(n - 1, pos1, pos3,pos2);
		//将A上的东西移动到C上
		move(pos1, pos3);
		//将B杆子上的东西通过中转杆A移动到C上。
		Hanoi(n - 1, pos2, pos1, pos3);
	}

}

int main()
{
	/*Hanoi(2, 'A', 'B', 'C');
	printf("\n");
	Hanoi(2, 'A', 'B', 'C');
	printf("\n");*/
	Hanoi(3, 'A', 'B', 'C');
	printf("\n");
	return 0;

}

函数递归图

n==2时的

c677fd2c5511456db340e4c5cf50ab17.png

注意:

上面的,Hanoi(1,A,C,B)和Hanoi(1,B,A,

C)都是这个分支

标签:int,move,Hanoi,青蛙,问题,汉诺塔,pos2,pos3,pos1
From: https://blog.csdn.net/2402_86350741/article/details/143058061

相关文章

  • 解决driverClassName: com.mysql.cj.jdbc.Driver报红问题
    为将项目从postgre库转为本地mysql数据库,需要将数据库驱动改为mysql1.在父工程的pom中引入数据库<!--Mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><v......
  • 2162: 练9.1 字符菱形 【空格问题】
    include<bits/stdc++.h>usingnamespacestd;intmain(){chara;cin>>a;cout<<""<<a<<endl;cout<<""<<a<<a<<a<<endl;cout<<a<<a<<......
  • 【MySQL】设置二进制日志文件自动过期,从根源上解决占满磁盘的问题:通过修改 binlog_exp
    引言MySQL的二进制日志(binlog)文件记录了数据库中所有更改的详细信息,包括但不限于对数据的插入、删除、更新,对表和数据库的创建、更改、删除等操作。每一次这样的操作都会在二进制日志中生成一个新的日志事件,并被写入到一个新的二进制日志文件中。因此,如果数据库的活动量较......
  • 图的m着色问题与图的最大团问题的关系,以及利用这个关系改进最大团问题的上界
    图的m着色问题与图的最大团问题的关系一、图的m着色问题1.定义:给定无向连通图G=(V,E),其中V是顶点集合,E是边集合。用m种颜色对图中的每个顶点进行着色,使得任意两个相邻的顶点具有不同的颜色。目标是确定是否存在这样的着色方案,以及如果存在,找出一种具体的着色方式。2.目......
  • 面试问题
    1.防止订单重复提交使用redis分布式锁来实现,可以使用用户ID,加购物车的商品ID,使用MD5算法,得出一个key作为分布式锁的key。解决问题的关键是保持分布式锁的key的唯一性。2.缓存击穿如果用户查的ID数据库没有值,那么缓存就击穿了,解决办法,如果数据库没有值,也给他缓存一个空......
  • int32_t的发散性问题
    int32_t 是一个在C和C++中定义的固定宽度整数类型。它表示一个32位的有符号整数类型,定义在 stdint.h(C标准库)或 cstdint(C++标准库)中。宽度:32位取值范围:-2,147,483,648到2,147,483,647类型:有符号整数(signed),即可以表示正数、负数和零。这种类型确保了在......
  • java_day18_多线程、线程安全问题、死锁、等待唤醒机制
    一、线程1、多线程进程:是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。举例:IDEA,阿里云盘,wegame,steam线程:是进程中的单个顺序控制流,是一条执行路径一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行......
  • 解决下包慢的问题(常用命令)
    解决下包慢的问题(常用命令)1.切换npm的下包镜像源1.查看当前的下包镜像源​npmconfiggetregistry2.将下包的镜像源切换为淘宝镜像源​npmconfigsetregistry=https://registry.npmmirror.com/3.检查镜像源是否下载成功​npmconfiggetregistry2.......
  • 面试题速刷 - 实战会碰到的一些问题
    页面如何进行首屏优化?路由懒加载服务端渲染SSR只获取HTML就可以,里面包含data。APP预取(啥东西)APP结合H5、结合JSbridge分页图片懒加载lazyloadHybrid总结:后端一次性返回10w条数据,你会如何渲染?本身后端设计方案的设计就不合理!非要的话......自定义中间......
  • 异常问题解决
    异常:java程序编译或运行过程中出现的问题Throwable:Error:表示非常严重的问题,自己无法解决的问题Exception:除了RuntimeException其它异常【编译时期异常】:一般指的是异常尚未处理就编译了RuntimeException【运行时期异......