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步的情况。

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

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

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

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

  • 相关阅读:
    Java三大主流框架概述
    ASP.NET的内置对象
    9月29
    第一章
    在java开发中,为什么要使用单例模式。。?
    《设计模式之禅》一书学习心得(连载中)
    网上的一些java算法题的个人练习笔记
    第四次作业
    看《构建之法》有感
    实验四
  • 原文地址:https://www.cnblogs.com/Liuyt-61/p/10562486.html
Copyright © 2011-2022 走看看