美团点评编程笔试题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012770189/article/details/77679736

题目描述

有一个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;
}







展开阅读全文

没有更多推荐了,返回首页