第四届蓝桥杯C/C++A组题目:振兴中华
首先把题目贴上来吧!
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图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组题目:振兴中华的更多相关文章
- 2013年第四届蓝桥杯C/C++B组省赛题目解析
一. 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...
- 2013第四届蓝桥杯C/C++ B组
题目标题: 高斯日记:Excel 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示 ...
- 2015年蓝桥杯C/C++ B组题目题解
1. 输入一个字符串,求它包含多少个单词.单词间以一个或者多个空格分开. 第一个单词前,最后一个单词后也可能有0到多个空格.比如:" abc xyz" 包含两个单词,"a ...
- 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】
2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...
- 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...
- 带分数--第四届蓝桥杯省赛C++B/C组
第四届蓝桥杯省赛C++B/C组----带分数 思路: 1.先枚举全排列 2.枚举位数 3.判断是否满足要求 这道题也就是n=a+b/c,求出符合要求的abc的方案数.进行优化时,可以对等式进行改写,改 ...
- 第四届蓝桥杯 c/c++真题
第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...
- 52-2018 蓝桥杯省赛 B 组模拟赛(一)java
最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...
- 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...
随机推荐
- 实现O(1)获取最大最小值的栈----java
原文:http://blog.csdn.net/sheepmu/article/details/38459165 实现O(1)获取最大最小值的栈和队列----java 一.如何实现包含获取最小值函数的 ...
- Java_Web使用简单的批处理操作
之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到.所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太 ...
- iOS 手机 邮箱 正则表达式
//iOS代码//判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex ...
- nodejs的mysql模块学习(七)连接池事件
连接池事件 connection 当建立连接的时候就会触发 pool.on('connection' function(connection){ connection.query('SET SESSI ...
- css中内容生成器
一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...
- javascript,jquery(闭包概念)
(function($){ $("div p").click(...);})(jQuery); 就是等于function tempFunction($){ //创建 ...
- Oracle 常用命令大全
一.如何有效地利用数据字典 ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图.数据字典名称是大写的英文字符. 数 ...
- Jira安装部署
一.先安装JDK JDK1.6下载:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32- ...
- cordova发送邮件插件:ngcordova plugin-Email Composer
这是ngcordova里边的一个发送邮件的插件,具体的使用方法为: (参考文档:http://ngcordova.com/docs/plugins/emailComposer/) 1.首先下载插件: ...
- ASP.NET验证控件应用实例与详解。
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 1RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 2CompareValidator(比 ...