《猩球觉醒》中的高智商猩猩也会的汉诺塔问题,快来看看!!!(C语言,适合入门小白)

本文主要是介绍《猩球觉醒》中的高智商猩猩也会的汉诺塔问题,快来看看!!!(C语言,适合入门小白),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

汉诺塔问题

目标:借助B,将A的n个盘子移动到C

要求:

  1. 每次只能移动一次

  1. 必须上小下大,小的盘子能放在大的盘子上面,反之则不行

  1. 步骤最少

图解:(从小到大编为1,2,3,4……)

列举寻规律

当n=1时,需要1步;

当n=2时,需要3步;

当n=3时,需要7步;

当n=4时,需要15步;

如果你对数字敏感的话你很快发现规律:2^n-1;

如果你自己上手实操你会发现:第n个在C时必定有前n-1个在B上进行堆叠

而且我们知道:

三个柱子没有差异

从B往C堆叠的步骤等于从A往C堆叠的步骤;

所以可以得到一个等式:F(n)=2*F(n-1)+1;(F(n)是函数,表示移动n个盘子需要的步数;

+1是因为你要先移动第n个到C)

由此我们有两个方法:递归,数学公式法:等比数列

递归

对递归不熟悉的可以看看我的另一篇文章《青蛙跳台阶问题——三种方法教会你(适合入门小白)

代码如图:

数学公式法:等比数列

F(n)=2*F(n-1)+1

两边同时+1

创建等比数列:F(n)+1=2(F(n-1)+1);

得到:F(n)=2^n-1

代码如图:

//数学公式法

#include<math.h>

int main()

{

int count = 0;//计算步骤

int n = 0;//n个盘子

scanf("%d", &n);

count = pow(2, n) - 1;

printf("count=%d\n", count);

return 0;

}

这篇关于《猩球觉醒》中的高智商猩猩也会的汉诺塔问题,快来看看!!!(C语言,适合入门小白)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334795

相关文章

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时