zoukankan      html  css  js  c++  java
  • 听说是阿里笔试题

      今天在csdn论坛里面看到一个贴子说一了一个阿里的面试题,题目大概意思是这样

    1.一个3X3(就像3阶魔方一样)的格子,现在你在正面的左上角顶点上,要走到背面的右下角(这里应该还是从前向后看的右
    边)顶点上.
    2.一次可以走任意格数,但是只能从前向后,从左向右,从上向下.
    3.一共有多少种走法.
    如下图.

      最初的思路.
      刚看到题我的思路就是走到正面的每一个格子有多少种走法,然后再去计算从正面的不同格子到背面格子走法.但是最后发现不同的格子走到终点格子路径都不同.而且出发不仅仅从正面开始,也可以从上面,左面,最后这个也不是乘以3的关系,因为左面,上面到终点格子上的走的方式也不相同.一下就陷入混乱中,不能有一定的规则.

      我看着图,一边想,并且找到一条路径,最边沿的路径,先向右走三格,然后再向下走三格,最后再向前走三格,这样可以到达终点.其它路径还有很多,那有什么规律呢?就是向右,向下,向前都是走的三格,这里只要总和是三格即可,比如你先向右走一格,再向下走三格,再向前走三格,再向右走两格也是可以到的.也就是说只要向右走的总和为3,向下走的总和为3,向前走的总和为3就可以了.那么我们再来验证一下,看有没有可能出现不是3格的情况,我们多弯几次,但是发现题中只能按前向后,左向右,上向下走,所以只有为3的情况才可以.

    那么现在就是把三种3格的不同组合进来就可以了.现在我们看从左向右3格的情况有多少种.也就是3的拆分,如下
    1 1 1 //3可分成1和1和1 表示 一次走1格,三次
    1 2 //3可分成1和2 表示 一次走1格,一次走2格
    2 1
    3

    接下来就是有趣点的事情况了,也就是把从上向下和从前向后组合进去,并且这两种也是要总和为3格,这里我们不急,一步一步的来.后面两种拆分方法也是同上面4种情况.下面是组合情况
    1.当从左向右为 1 1 1的情况下,这里我们用排列组合的方式,也就是从4个位置中插入后面两种走法情况,要求达到都是3格.
    1.1 当其中一步走的是从上到下的情况,当然另外的就是从前到后了.结果为
    C(4,1)*1*1
    1.2 当其中两步走的是从上到下的情况
    C(4,2)*2*2 (这里乘以2表示有两步走的有两种情况,走1格和走2格,走2格和走1格)
    1.3 当其中三步走的是上到下的情况
    C(4,3)*1*1

    2.当为1 2的情况,同上面分析得出
    C(3,1)*1*2
    C(3,2)*2*1

    3.当为2 1,同上
    4.当为3的时候
    C(2,1)*1*1

    所以最后结为,把几种情况加起来
    1.4+24+4=32
    2.6+6=12
    3.6+6=12
    4.2

    最后结果为58,(貌似我回贴计算出误,当时可能算错了,当时52),这个题目我不知道具体的答案,如有发现有误的地方可以回复交流.


    这里是修改部分,昨天晚上在逛超市的时候,不知怎么突然觉得上面的方法还有情况没有列举完,上面的情况只是当从左向右的情况全部在排列中间的情况,因为我选空是n+1的方式,所以这里还应该考虑从左往右在前,从左往右在后的情况.那么后面结果还有

    C(3,1)*1*2 

    C(2,1)*1*1

    C(2,1)*1*1

    C(1,1)*1*1

    所以结果应该再加上 (6+2+2+1)*2=22,那最后结果应该58+22=80,如果还有问题后面再修改吧.

     [2014-07-02修改]


     这里我又要修改了一下,因为前面的全部错了,前面思考了这么多,最后发现简单的方法,而且之前的3格应该是2格才对,也就是说从左向右走两格,从上向下走两格,再前向后走两格就到终点了.

    所以可以理解成6个位置放三种颜色的球,每种球两个,那么结果应该是 C(6,2)*C(4,2)就ok了

    所以结果应该是15*6=90

    [2014-07-03修改]


      高潮后面总是结束,总结一下,其实这种没有什么总结的.
      主要是那个插入的各种情况的分析,其实如果这个要写代码来计算可能比分析还要复杂点,好像那个题目就是叫填个空,也就是写程序来实现.

  • 相关阅读:
    net5:动态修改内存中的站点地图节点
    手动创建DataTable并绑定gridview
    文件转换成二进制流及二进制流转换成文件
    XML 增、删、改和查的实例【转】
    免费CSS鼠标样式代码大全
    C#连接数据库SQL(2005)
    关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用
    史上最全的Maven Pom文件标签详解
    Readme.MD 例子
    GitHub中README.md文件的编辑和使用
  • 原文地址:https://www.cnblogs.com/gw2010/p/3818820.html
Copyright © 2011-2022 走看看