zoukankan      html  css  js  c++  java
  • 腾讯的笔试题一道

    搜罗了一些腾讯的笔试题目 

     
    题目是这样的:
     

     在如下8*6的矩阵中,请计算从A移动到B一共有多少种走法?要求每次只能向上挥着向右移动一格,并且不能经过P;

     

     

     

     

     

     

     

    B

     

     

     

     

     

     

     

     

     

     

     

    P

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    A

     

     

     

     

     

     

     

    A)492

    B)494

    C)496

    D)498

     

    下面是博兄的思路,很给力。
     
     
     
    倒数1     1    =    1
     
     
     
     倒数第2列   1+1+1+1+1=  5
     
     
    倒数第三列  5+4+3+2+1= 15
     
    这道题目完全可以这么理解   如果翻转一下你会发现
     
     
     p点先忽略 
    发现什么了  ?
    只要 到了最后一排就相当于接触到了b 
    所以     根据题意  
    倒数1     1    =    1
    倒数2   1+1+1+1+1=  5
    倒数3   5+4+3+2+1=  15
    倒数4  15+10+6+3+1= 35
    倒数5  35+20+10+4+1=70
    倒数6  70+35+15+5+1=126
    倒数7  126+56+21+6+1=210
    倒数8  210+84+28+7+1=330
    全部相加 1+5+15+35+70+126+210+330=792
    根据题意从A到B一共有792种走法
    减去经过P的就是要求的那部分
    经过p的 
    可以根据倒数排数推出 从p点出发一共有15种走法
    然后  由图中可以分析出  能够到达p点的路径有20种
    15*20=300
    这就是经过p点所有路径
    那么  792-300=492 
     
     
     
     
    2。排列组合  C(12,7) - C(6,4)*C(6,3) = 492;
     
     
    初看这个式子感觉看不太懂,稍微提示下,a点到b一点不论怎么走都要走12步,其中行必须走7步,列必须走5步。
     
     
    C(12,7) = C(12,5);
     
     
    3.递归程序解法
    下面我用程序进行验证。
     
    // shuju.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace  std;
    
    int numcout = 0;
    
    
    #define    px   2    //p点的x,y坐标
    #define    py   3
    
    
    void fun(int m,int n)
    {
        
        if(m==0 &&n==7)
        {
            numcout++; 
            return;
        }
        //进行判断去除p点位于数组的2,3位置
    
    
       if(m==px&&n==py-1)
       {
             m = m-1;     
       }
    
       if(m==px+1&&n==py)
       {
            
             n = n+1;
       }
     
    
       if(m>=0 )
        {
            fun(m-1,n);
        }
        
        if(n<=6)
        {
            fun(m,n+1);
        }
    }
    
    
    int main(int argc, char* argv[])
    {
        fun(5,0);           
        cout<<numcout;
        return 0;
    }

    思考,假如这道题规定按对角线斜着也能走,那们a点到b点有多少种走法呢?

  • 相关阅读:
    在C#中如何使用资源的方法
    C#调用windows API的一些方法
    Uml学习-类图简介
    Uml学习-用例建模简介
    sqlserver中DATE类型的数据转化 CONVERT
    mysql database和schema区别
    nginx buffer
    django pk 和id用法
    sed正则
    kong 插件开发分析
  • 原文地址:https://www.cnblogs.com/pipicfan/p/2667066.html
Copyright © 2011-2022 走看看