zoukankan      html  css  js  c++  java
  • 坏台阶问题

    题:

    一个人走了很多年,发现自己走到一个很长的,年久失修的楼梯面前。年久失修的意思就是,有k个台阶坏了,没法走。楼梯一共有n层,你一次能上一阶、两阶或三阶台阶,请问,你从楼梯底部(0开始)走到楼梯顶部,共有多少种走法。

    输入格式

    输入数据共两行,第一行包含两个自然数n(1 ≤ n ≤ 100)和 k (0 ≤ k < n),第二行包含k个自然数Xi (1 ≤ Xi  ≤ n),数字之间用一个空格隔开,表示损坏的台阶的序号(从楼梯底部到楼梯顶部,台阶序号依次为1到n)

    输出格式

    输出数据仅包含一个整数,表示所有可行走法的总数

    样例

    input
    ------------------------------------------
    5 2
    2 4
    ------------------------------------------
    output
    ------------------------------------------
    2

    分析

    题目解读很重要,简要说就是有一个楼梯有n个台阶,其中坏了k个台阶不能落脚走,楼梯底部平台编号为0,依次往上自增编号1,2,3......n,n为楼梯顶部的平台。一个人从楼梯底部要走到楼梯顶部去,他一步只能走1个或者2个或者3个台阶,问他有几种方法恰巧能够走到楼梯顶部,不限制步数。

    把台阶抽象成数组a,a[0]即为楼梯底部的平台处,a[n] 即为所要到达的楼梯顶部。

    万物皆可遍历!遍历就要进行比对判断,所要初始化完表示台阶的a数组之后就需要把a数组中的坏的台阶编号对应的数值修改为特定值,可定为-1。

    就像求一个集合有多少子集一样的思路去进行判断,判断当这个人站在某个台阶上的时候往后走1步/2步/3步之后再继续1步/2步/3步的情况。

    又可以抽象成一颗树,从根节点往下衍生出孩子节点,一直衍生到叶子节点刚好到顶部台阶(满足)或者超过顶部台阶(不满足)。

    直接上代码,代码也加上了一些注释,顺着思路应该就能够清晰了。

    题目限制输入输出的格式,但我还是加了点提示按舒服点儿的方式去输入,当然你要去修改成题目要求格式也是可以,但是这不是重点,重点还是在解题上,格式规范舒服就好。

    如果真的是平台解题那肯定是需要按输入输出格式来的。

  • 相关阅读:
    【Mongodb教程 第九课 】MongoDB 删除文档
    【Mongodb教程 第八课 】MongoDB 更新文档
    【Mongodb教程 第七课 】MongoDB 查询文档
    【Mongodb教程 第六课 】MongoDB 插入文档
    【Mongodb教程 第五课 】MongoDB 删除集合
    【Mongodb教程 第四课 】MongoDB 创建集合
    【Mongodb教程 第三课 】MongoDB 删除数据库
    【Mongodb教程 第二课 】 MongoDB 创建数据库 use 命令
    题解 P2821 【变幻数】
    题解 P6249 【神帖】
  • 原文地址:https://www.cnblogs.com/Liuyt-61/p/10562486.html
Copyright © 2011-2022 走看看