/*
标题: 振兴中华小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:从我做起振我做起振兴做起振兴中起振兴中华比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。要求跳过的路线刚好构成“从我做起振兴中华”这句话。请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
*/
#include <stdio.h>
#define N 5
#define M 5
int main() {int a[N][M];int i, j;for (j = 0; j < M; j++) {a[0][j] = 1;}for (i = 1; i < N; i++) {a[i][0] = 1;for (j = 1; j < M; j++) {a[i][j] = a[i-1][j] + a[i][j-1];}}printf("%d", a[N-1][M-1]);return 0;
}
解决思路:
1、“从我做起振兴中华”,找茬找规律嘛,发现存在 a[i][j] = a[i-1][j] + a[i][j-1] 的递推规则,既走当前a[i][j]格子跳跃的线路数等于 走到a[i-1][j] 跳跃线路数加上 走到a[i][j-1]格子跳跃线路数 (既,走到 “华” = 左边“中” + 上边“中”,走“中” = 左边“兴” +上边“兴”)。
2、横轴第一行、纵轴第一列跳跃线路数都只有1条线路。
3、上面的代码就是将所有格子的跳跃线路都递推式的计算出来,然后取出最后一个格子也就是走到终点“华”的跳跃路线数打印出来。
---------------------
文章转至个人博客《学习园 》
地址:https://www.xuexiyuan.cn/article/detail/188.html