首先把题目贴上来吧!

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

  地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图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. 一款基于css3的3D图片翻页切换特效

    今天给大家分享一款基于css3的3D图片翻页切换特效.单击图片下方的滑块会切换上方的图片.动起你的鼠标试试吧,效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id= ...

  2. CF 335A(Banana-贪心-priority_queue是大根堆)

    A. Banana time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  3. php 运行客户提交代码(攻击)和运行图片中的代码

    1.$a=@strrev(ecalper_gerp);$b=@strrev(edoced_46esab);@$a($b(L3h4L2Ug),$_POST[POST],bxxb); 2.<?php ...

  4. Java再学习——CopyOnWrite容器

    一,定义 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完 ...

  5. PowerDesigner 之 PDM建模

    很多码农使用Powerdesigner用来创建数据库,下面来具体记录一下使用该工具创建的过程. 1.首先运行PowerDesigner程序,进入主界面,如下图: 2.菜单栏依次"File→N ...

  6. Oracle 基础——索引

    一.索引 索引是一种快速访问数据的途径,可提高数据库性能.索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据,就像书的目录,可以快速查找所需的信息,无须阅读整本书. 二.索引存在的问题 ...

  7. oracle冷备份

    windows环境下Oracle数据库冷备份和恢复 1.点击开始菜单的“运行”,输入sqlplus/nolog 2.在弹出的命令行窗口以sysdba身份登陆,要输入:系统用户名/登陆密码@数据库实例名 ...

  8. test命令的用法

    test命令可用于:文件属性的测试字符串测试算数测试test命令语法如下所示:test EXPRESSION或者[EXPRESSION] 示例:# test -d "$HOME"; ...

  9. HDU 1069 Monkey and Banana (DP)

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  10. 数理方程:Laplace变换 & 留数(更新中)

    更新:25 APR 2016 Laplace变换 设函数\(f(t)\)在\(t>0\)时有定义,积分 \(F(s)=\int_0^{+\infty}f(t)e^{-st}dt \qquad ( ...