美团点评编程笔试题

题目描述

有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。

输入描述:

输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。

输出描述:

输出包括一行,为走法的数目。

示例1

输入

3 2

输出

10

思路:

把网格看做二维座标,向下为正,向右为正:
设f(m,n)代表从座标(m,n)到座标(0,0)的移动方法,则
f(m,n)=f(m-1,n)+f(m,n-1)
开始为f(0,0)=0,f(0,1)=1,f(1,0)=1
进行递归运算,退出条件就是m,n至少有个为0,否则就要继续递归运算。

#include<iostream>
using namespace std;

int step(int n, int m){
    if(m == 0 || n == 0) //如果走到边界了,则只有一种方式了
        return 1;
    else
        return step(n - 1, m) + step(n, m - 1); //递归
}

int main(){
    int x, y;
    cin >> x >> y;
    cout << step(x, y) << endl;
    return 0;
}

点赞