算法—振兴中华(C语言版)

/*
标题: 振兴中华

    小明参加了学校的趣味运动会,其中的一个项目是:跳格子。

    地上画着一些格子,每个格子里写一个字,如下所示:

	从我做起振
	我做起振兴
	做起振兴中
	起振兴中华

    比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。

    要求跳过的路线刚好构成“从我做起振兴中华”这句话。请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
*/
#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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页