题意:给出一个N*M的棋盘,要求出从棋盘的左下角到棋盘的右上角有多少条路径;
如图所示:如果到达左边缘或下边缘线上的点,只有沿着一个方向一直往前走,方案都只存在一种。从坐标点(1,1)开始,该点存在的到达方案数为到达坐标(0,1)和(1,0)的方案数之和,如图中箭头所示。而已知到达坐标(0,1)和(1,0)的方案数都为1种,所以到达坐标点(1,1)的方案数为2。同理,到达坐标点(1,2)的方案为(0,2)和(1,1)之和……
#include<stdio.h>
int main() {
long long dp[50][50] ;
for(int j=1;j<32;j++)
dp[0][j]=1;
for(int i=1;i<32;i++)
dp[i][0]=1;
for(int i=1;i<32;i++)
for(int j=1;j<32;j++)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
int n , m ;
while(scanf("%d%d",&m,&n)){
if(m==0&&n==0)
return 0 ;
printf("%lld\n",dp[m][n]) ;
}
return 0 ;
}
最后数值比较大,需要使用 long long 数据类型 或 __int64