首先把题目贴上来吧!
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图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 ...
-
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...
-
第四届蓝桥杯 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 ...
-
【备考06组01号】第四届蓝桥杯JAVA组A组国赛题解
1.填算式 (1)题目描述 请看下面的算式: (ABCD - EFGH) * XY = 900 每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0. 比如 ...
-
2015年第六届蓝桥杯C/C++B组省赛题目解析
一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...
随机推荐
-
USACO2016Splitting the Field分割牧场
Description FJ的N头奶牛分别位于他二维的牧场的不同位置.FJ想用一个矩形栅栏围住这些牛(牛可以在栅栏边上),并使这个栅栏尽可能小.这个栅栏的边与x轴或y轴平行.不幸的是,FJ上个季度的牛 ...
-
WCF之数据契约
从抽象层面看,WCF能够托管CLR类型(接口和类)并将它们公开为服务,也能够以本地CLR接口和类的方式使用服务.然而,CLR类型却属于.NET的特定技术.由于面向服务的一个核心原则就是在跨越服务边界时 ...
-
纯CSS3制作进度条源代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
-
DoingOrder.aspx.cs缓存的使用方法
using System; using System.Web.UI; using System.Data; using System.Text; using BLL = SmartWaterSys.B ...
-
JS编程最佳实践
最近花了一周时间把<编写可维护的js> 阅读了一遍, 现将全书提到的JS编程最佳实践总结如下, 已追来者! 1.return 之后不可直接换行, 否则会导致ASI(自动分号插入机制)会在r ...
-
Heartbeat+DRBD+MySQL高可用方案【转】
转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...
-
linuxmint计算器
命令行输入bc进入计算器, 可以计算 + 加法 - 减法* 乘法 / 除法^ 指数 % 余数 quit 关闭计算器
-
Spring boot之hello word
环境准备 一个称手的IDE(首选Myeclipse,也可以选Eclipse) Java环境(JDK 1.7或以上版本) Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用I ...
-
(9/24) 图片跳坑大战--css分离与图片路径处理
前言: 在上一节当中,我们把小图片打包成Base64格式(打包到了js当中).我们也算是对webpack对图片的打包有个基本了解. 本节我们准备把css从JavasScript代码中分离出来,这会遇到 ...
-
【眼见为实】自己动手实践理解数据库READ UNCOMMITED &;&; SERIALIZABLE
目录 准备工作 ①准备测试表和测试数据 ②关闭数据库事务自动提交 ③设置InnoDB存储引擎隔离级别 [READ UNCOMMITTED] [READ UNCOMMITTED]能解决的问题 [READ ...