首先把题目贴上来吧!

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

  地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图1)

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

  图1

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

  要求跳过的路线刚好构成“从我做起振兴中华”这句话。

  请你帮助小明算一算他一共有多少种可能的跳跃路线呢?

  这个题目蛮简单,所以为了提升难度,后来我又添加了两个要求:

  1.能够把所有行走的路径输出出来!

  2.能够按照要求输出特定一条路径。(比如这条路径: 从→我↓做↓起↓振→兴→中→华)

  OK,简单说一下我的思路:

    首先把“从我做起,振兴中华”这八个字按照0~7的顺序编好,然后把这个方格存放在一个4*5的二维数组array里面,同时,设定一个同样大小的flag数组来存放行走轨迹,最后还要设定一个road_flag[7]的数组来记录行走的步子是横向还是纵向。

    

    接下来就是利用递归遍历这个二维数组,

    递归过程是:从0,0开始,横着或者竖着前进,向前前进一格的条件就是没有超出范围,并且下一格的数字比这一格大1。每次前进一格后,就把flag数组中相应的位置标记为1,同时根据行走的步子的方向来对road_flag中的相应步数进行标记。

    如果到达了华这个字(相应的数字为7),那么就到了递归出口,判断这一条路径是否符合要求,是否能够输出,然后返回。

    函数返回之后,要把相应的路径标记和步子标记清除。

    就这样一直遍历,直到把所有的路径都找出来!

  程序的代码如下:

 #include<stdio.h>
#include<string.h>
#define ROW 4
#define COL 5 int count; //统计路径的次数
int flag[ROW][COL]; //路径标记
int road_flag[ROW+COL-]; //步子标记
int road_count; //用来记录走的步数 int road(int arr[][COL],int row,int col); int main(int argc,char *argv[])
{
int array[ROW][COL] = {
{,,,,},
{,,,,},
{,,,,},
{,,,,} }; road(array,,);
printf("count = %d\n",count); return ;
}
int road(int arr[][COL],int row,int col)
{
flag[row][col]=; //标记路径 if(arr[row][col] == )
{
count++;
//printf("No.%d:\n",count); //判断这一条路径是否符合我们的要求
if(==road_flag[] && ==road_flag[] && ==road_flag[] &&
==road_flag[] && ==road_flag[] && ==road_flag[] &&
==road_flag[]
)
for(int rloop=;rloop<ROW;rloop++)
{
for(int cloop=;cloop<COL;cloop++)
if( == flag[rloop][cloop])
printf(" # ");
else
printf(" ^ ");
printf("\n");
}
return ;
}
//横向走
if(col+<COL && arr[row][col+]==arr[row][col]+)
{
road_flag[road_count] = ; //标记步子
road_count++; road(arr,row,col+); //取消路径和步子标记
flag[row][col+] = ;
road_count--;
road_flag[road_count] = ;
}
//纵向走
if(row+<ROW && arr[row+][col]==arr[row][col]+)
{
road_flag[road_count] = ; //标记步子
road_count++; road(arr,row+,col); //取消路径和步子标记
flag[row+][col] = ;
road_count--;
road_flag[road_count] = ;
}
}

  Ok,上面这个程序就能够按照我们的要求输出特定的路径(从→我↓做↓起↓振→兴→中→华),而那个count就是一共有多少条路径!如果想要输出全部的路径,只需要把递归出口中的那个if语句(36~39)去掉,并且把它上面的那个printf语句的注释(33)取消掉,就能查看所有的路径了!

  程序的运行结果如下:

  

  输出全部路径的结果则如下图:

  

  Ok,That‘s all!希望能够对大家有帮助!

第四届蓝桥杯C/C++A组题目:振兴中华的更多相关文章

  1. 2013年第四届蓝桥杯C/C++B组省赛题目解析

    一. 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...

  2. 2013第四届蓝桥杯C/C++ B组

    题目标题: 高斯日记:Excel 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示 ...

  3. 2015年蓝桥杯C/C++ B组题目题解

    1. 输入一个字符串,求它包含多少个单词.单词间以一个或者多个空格分开. 第一个单词前,最后一个单词后也可能有0到多个空格.比如:" abc xyz" 包含两个单词,"a ...

  4. 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】

    2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...

  5. 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案

    2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...

  6. 带分数--第四届蓝桥杯省赛C++B/C组

    第四届蓝桥杯省赛C++B/C组----带分数 思路: 1.先枚举全排列 2.枚举位数 3.判断是否满足要求 这道题也就是n=a+b/c,求出符合要求的abc的方案数.进行优化时,可以对等式进行改写,改 ...

  7. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  8. 52-2018 蓝桥杯省赛 B 组模拟赛(一)java

    最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...

  9. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

随机推荐

  1. 动漫网站基于jquery的横向手风琴特效

    今天给大家分享一款动漫网站基于jquery的横向手风琴特效.这款手风琴特效适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预 ...

  2. postgres数据库中的数据转换

    postgres8.3以后,字段数据之间的默认转换取消了.如果需要进行数据变换的话,在postgres数据库中,我们可以用"::"来进行字段数据的类型转换.实际上"::& ...

  3. Visual Studio 2015 与GitLab 团队项目与管理【2】

    前一篇介绍了Git服务器的搭建,我采用的是CentOS7-64位系统,git版本管理使用的是GitLab,创建管理员密码后进入页面. 创建Users,需要记住Username和邮箱,初始密码可以由管理 ...

  4. page61-将二分查找重写为一段面向对象的程序

    1 将二分查找重写为一段面向对象的程序 (用于在整数集合中进行查找的一种抽象数据类型) public class StaticSETofInts [API] StaticSETofInts(int[] ...

  5. Shell学习笔记 - 环境变量配置文件

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  6. js中Math()函数&&数据类型转换

    Math()函数: x的y次方:Math.pow(x,y) 取小数点后两位:num.toFixed(2) 数据类型转换: 字符串转换为数字:parseInt(num)转换为整数:parseFloat( ...

  7. POJ 3422 Kaka's Matrix Travels K取方格数

    题目:给出n*n的方格矩阵,现在从左上方走m次到右下方,问m次能够获得的最大价值和. 分析:最大费用流.拆点进行限制每个格子只取一次,假设点x拆成 x,xx,右边(假设有)y,yy,下方(假设有)z, ...

  8. 转:Android官方MVP架构示例项目解析

    转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...

  9. Linux 驱动分类 与访问技术

    驱动开发概述 1.驱动分类 1.1 常规分析法 1.1.1  字符设备  字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,  这样的驱动通常实现open, close, read和wri ...

  10. android百度地图中的地图缩放级别

    前期搭建百度地图的环境就不说了,网上一搜一大把,这里只讲地图的缩放,大神可以直接绕道 首先在类的内部初始化一个百度地图的对象 private BaiduMap mBaiduMap; 然后在OnCrea ...