转载: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
- <span style="font-size:12px;">#include <iostream>
- using namespace std;
- int Steps(int x, int y)
- {
- if(x > 9 || y > 6)
- return 0;
- if(x == 8 && y == 6)
- return 1;
- if(x == 9 && y == 5)
- return 1;
- return Steps(x+1, y) + Steps(x, y+1);
- }
- int main() {
- // your code goes here
- cout << Steps(0,0) << endl;
- return 0;
- }</span>
时间: 2024-10-10 08:58:32