请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
数据范围:
#include <stdio.h> inline int func(int m, int n) { int map[100][100] = {0}; for (int i = 0; i < n; i++) map[0][i] = 1; for (int i = 1; i < m; i++) map[i][0] = 1; for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { map[i][j] = map[i - 1][j] + map[i][j - 1]; } } return map[m - 1][n - 1]; } int main() { int m = 0, n = 0; scanf("%d %d", &m, &n); printf("%d", func(++m, ++n)); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int tmp = 0,cnt = 0; int rc[2] = {0,0}; while(scanf("%d",&tmp) != EOF) { if(tmp != ' ' && tmp != '\n') { rc[cnt++] = tmp+1; } if(cnt == 2) { int **map = (int *)malloc(rc[0] * sizeof(int*)); for(int i = 0; i < rc[0]; i++) { map[i] = (int *)malloc(rc[1] * sizeof(int)); memset(map[i],0,rc[1]); } for(int j = 0; j < rc[1]; j++) map[0][j] = 1; for(int i = 0; i < rc[0]; i++) map[i][0] = 1; for(int i = 1; i < rc[0]; i++) { for(int j =1; j < rc[1]; j++) { map[i][j] = map[i][j-1] + map[i-1][j]; } } printf("%d\n",map[rc[0]-1][rc[1]-1]); cnt = 0; } } return 0; }
#include<stdio.h> int path(a,b) { if(a==0 || b==0) return 1; else return path(a-1,b)+path(a,b-1); } int main() { int num1,num2; while(scanf("%d %d",&num1,&num2)!=EOF) { printf("%d\n",path(num1,num2)); } return 0; }