c++ 取外卖的所有路线(苏州市2023年青少年编程挑战赛真题)

取外卖的所有路线
题目描述
猪猪最近生活拈据,入不敷出,于是在小季的推荐下,干起了某团骑手的兼职。
猪猪所在的城市是个MxN的网格,他位于网格的左上角处,R0位置(0,0)处。
现在他接到一个汉堡外卖单,要去网格右下,即位置(M-1.N-1)取餐。
由于取餐有时间限制,所以猪猪骑车时只能在网格中向下或者向右走
请你帮助小季和猪猪算 算,共有多少种取外卖的路线
输入格式
输入两个正整数M,N ,代表网格行数、列数:
输出格式
输出一个整数,表示猪猪取外卖的所冇路线数
输入输出样例

输入样例    2 2

输出样例 2

输入样例13 15
输出样例9657700
样例解释
对于第一组样例:
第一种路线:先向下,再向右
第二种路线:先向右,再向下
数据范围
1 10 组测试数据,每组测试数据 10 分。
对于第 1~2 组数据,n=1
对丁第 3~4 组数据,n=2.
对于第 5~7 组数据,1 ≤n,m ≤ 5.
对丁第 8~10 组数据,1≤n,m≤ 15
对于所有数据,1≤n,m≤15,答案在 32 位有符号整数的表示范围
之内。


这道题我们可以联想到标数法,既一个位置等于他的通过方法的和,就是如果在这道题目之中一个位置就等于它左边的格子和上面的格子的和。(如果不知道标数法的可以去网上搜一下)

所以这道题我们可以建立一个二维数组,依次遍历,求出当前格子的走法数。

代码如下:

#include<bits/stdc++.h>
using namespace std;
long long a[20][20]={0};
int main()
{
	a[1][1]=1;//对数组的第一个初始化
	int M,N;
	cin>>M>>N;
	for(int i=1;i<=M;i++)
	{
		for(int j=1;j<=N;j++)
		{
			if(a[i][j]==a[1][1])
			{
				continue;//如果是第一个就跳过
			}
			else
			{
				a[i][j]=a[i-1][j]+a[i][j-1];
			}
		}
	}
	cout<<a[M][N];//输出最后一个,就是答案
	return 0;
}

点个赞再走吧(欢迎评论,评论啥都行)

本人也在学c++的路途当中,不喜勿。(第一次做,给点建议)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值