码迷,mamicode.com
首页 > 其他好文 > 详细

走格子问题

时间:2017-09-23 00:11:47      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:toc   plain   区别   序列   答案   views   data-   div   网格   

转载:http://blog.csdn.net/moses1213/article/details/52164248

6×9的的方格中,起点的左下角,终点在右上角,从起点到终点,只能从下向上,从左向右走,问一共有多少种不同的走法。
A.  4200
B.   5005
C.  1005

D.  以上都不正确

这原本是道选择题,答案选B。已选择题的思路的来解决这道问题,假设左下角坐标为(0,0),那么右上角坐标为(6,9)。从左下角走到右上角,横向要走9步,纵向走6步,不管采用哪种方式横向和纵向走的步数和是不变的,不同走法的差异在与总共15步中横向9步放在那些步数序列上,所以总共有15选9种走法。

 

下面用程序解决这个问题:因为只能从下到上,从左到右。所以第一步有两种走法,向上走一步到(0,1),或者向右走一步到(1,0),在(0,1)位置又有两种走法,实际上这与原问题区别只是起始坐标不同,递归解决。递归的终止条件是什么?这是一定要想清楚的,想象走到倒数第二步了,也就是(5,9)或者(6,8)的位置上,这时候就只有一种走法了,返回1。但是递归函数会超过网格的边界,返回0.

 

[cpp] view plain copy
 
    1. <span style="font-size:12px;">#include <iostream>  
    2. using namespace std;  
    3.    
    4. int Steps(int x, int y)  
    5. {  
    6.     if(x > 9 || y > 6)  
    7.         return 0;  
    8.     if(x == 8 && y == 6)  
    9.         return 1;  
    10.     if(x == 9 && y == 5)  
    11.         return 1;  
    12.    
    13.     return Steps(x+1, y) + Steps(x, y+1);  
    14. }  
    15.    
    16. int main() {  
    17.     // your code goes here  
    18.     cout << Steps(0,0) << endl;  
    19.     return 0;  
    20. }</span>  

走格子问题

标签:toc   plain   区别   序列   答案   views   data-   div   网格   

原文地址:http://www.cnblogs.com/awpboxer/p/7577408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!