【c语言】每日一题之汉诺塔类型

这篇具有很好参考价值的文章主要介绍了【c语言】每日一题之汉诺塔类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大佬们,我又回来了,最近也在忙自己的学业,忙着生活对线,也参加了今年的蓝桥杯其他的组,发现今年太难了 ,摆烂了。但我想到了读者你们,从今天开始继续更新博客。通过写一篇我随便写的有趣的题,打开今年的博客之旅。
【c语言】每日一题之汉诺塔类型
【c语言】每日一题之汉诺塔类型

题目说明

BC161 大吉大利,今晚吃鸡

描述

糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事就是把a柱的圆盘全部移到c柱,移动的过程中保持小盘在上,大盘在下,且限定圆盘只能够移动到相邻的柱子,即a柱子上的圆盘只能够移动到b,b柱子上的圆盘只能够移动到a或者c,c同理。现在请你设计一个程序,计算所需移动的最小步数, 帮助糖赢得大餐!

输入描述:
每一行输出有一个整数n(0<=n<26), 直至文件末尾。
输出描述:
对于每一组数据,输出一行,输出移动的最小步数M。

题目分析

对于本题,本质上和汉诺塔十分相似。我主要想说说怎么去求解其递推关系。

汉诺塔问题

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
【c语言】每日一题之汉诺塔类型

我们先来对汉诺塔的步数进行一下递推。
对于n个盘子,我们可以把它分成个盘子和最后一个大盘子。设为移动所需步数,那么对于个盘子来说所做的事情就是将个盘子借助C柱移动到B柱上,这一过程移动的步数为,下一步我们将大盘子移动到C柱上,此时需要一步,最后,我们再将个盘子借助A柱移动到C柱上,此时需要的步数仍为。综合以上分析,。对两边同时加上1可以凑成一个等比数列,然后就可以求出其通项公式。

对于本题,我们依然可以按照刚才的思路来进行递推。
同样的,对于n个盘子,我们可以把它分成个盘子和最后一个大盘子。
同样设为移动所需步数。

将个盘子借助B柱移动到C柱上,这一过程移动的步数极为
将大盘子由A柱移动到B柱上,此时需要一步
将个盘子借助B柱移动到A柱上,这一过程移动的步数同样为
将大盘子由B柱移动到C柱上,此时需要一步
将个盘子借助B柱子移动到C柱上,此时需要的步数仍为。
综合以上分析,。同样,对两边同时加上1可以凑成一个等比数列,最后求出其通项公式即为。

题目代码展示

#include<stdio.h>
int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {
    int i=0;
    int num=1;

    for(i=0;i<n;i++)
    {
        num*=3;
     
    }
    printf("%d\n",num-1);
   
    }
}

通过用找规律的方法写出了这个题,但显然这题不算很难,希望大家仔细思考文章来源地址https://www.toymoban.com/news/detail-415603.html

到了这里,关于【c语言】每日一题之汉诺塔类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每日一题之最长连续递增序列

    题目链接 给定一个未经排序的整数数组,找到最长且 连续递增的子序列 ,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r ( l r )确定,如果对于每个 l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

    2024年02月12日
    浏览(39)
  • Python:每日一题之矩阵拼接

    问题描述 已知 3 个矩形的大小依次是 a1​×b1​,a2​×b2​ 和 a3​×b3​ 。 用这 3 个矩形能拼 出的所有多边形中, 边数最少可以是多少? 例如用 3×2 的矩形(用 A 表示)、 4×1 的矩形 (用 B 表示) 和 2×4 的矩 形(用 C 表示)可以拼出如下 4 边形。   例如用 3×2 的矩形 (用

    2024年02月11日
    浏览(38)
  • 每日一题之常见的排序算法

    排序是最常用的算法,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、希尔排序和归并排序。除此之外,还有桶排序、堆排序、基数排序和计数排序。 1、冒泡排序 冒泡排序就是把小的元素往前放或大的元素往后放,比较的是相邻的两个元素。 时间复杂度:

    2024年02月13日
    浏览(41)
  • 每日一题之数值的整数次方

    描述: 实现函数 double Power(double base, int exponent),求 base 的 exponent 次方。 注意: 1.保证base和exponent不同时为0。 2.不得使用库函数,同时不需要考虑大数问题 3.有特殊判题,不用考虑小数点后面0的位数。 我的思路:直接使用递归,让它每次乘一个它自身。但这存在一个问题,

    2024年02月12日
    浏览(40)
  • 每日一题之打家劫舍

    题目链接 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算

    2024年02月08日
    浏览(44)
  • 每日一题之打家劫舍II

    题目链接 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报

    2024年02月08日
    浏览(42)
  • 每日一题之两个字符串的删除操作

    题目链接 给定两个单词  word1  和  word2  ,返回使得  word1  和   word2  ** 相同 所需的 最小步数 。 每步  可以删除任意一个字符串中的一个字符。 示例 1: 示例  2: 提示: 1 = word1.length, word2.length = 500 word1  和  word2  只包含小写英文字母 我们可以定义一个二维数组 dp ,

    2024年02月15日
    浏览(39)
  • 每日一题:SpringBoot中支持的事务类型

    以下是每种事务类型的作用、代码示例和对代码的解释: PROPAGATION_REQUIRED (默认): 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则创建一个新的事务。适用于大多数业务场景,确保方法在事务中执行,如果没有事务,则创建一个新的事务。 代码

    2024年02月16日
    浏览(28)
  • C语言每日一题

    今天分享的是一道牛客网上面的题目,链接在下面 有序序列合并 这道题做法有很多,最简单的是合并一起,然后用排序就行了,今天将一个最高效的办法,思路是两个数组第一项进行比较,小的先输出,输出的那个数组的下标往后移动,然后再进行比较,如果是另一个数组

    2024年02月12日
    浏览(38)
  • C语言——每日一题

    倒置字符串 要将每一个单词逆序输出,首先可以将整个字符串内容都逆序输出,然后再将字符串中的每一个单词再进行逆序。 例如:逆序 i like beijing. 先逆序成: .gnijieb ekil i 再将每个单词逆序: beijing. like i 1.1 字符串的读取 先创建一个字符数组: char arr[101]; (因为题目中

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包