打印图形|2014年蓝桥杯B组题解析第五题-fishers
打印图形
小明在X星球的城堡中发现了如下图形和文字:
rank=3

rank=5

rank = 6

小明开动脑筋,编写了如下的程序,实现该图形的打印。
答案:f(a, rank-1, row, col+w/2);
思路:遇到递归就要想到规模减小和出口在哪!
1.递归就要想到规模减小,所以第二个参数rank-1是肯定不变的
2.另外第一个参数a数组必定不变
只需要更改row 和 col这两个参数了。
下面是对这两个参数的分析:
3.先把数据改小,直接运行一遍程序
发现只打印了最后一行,

为什么只打印最后一行呢?因为填空部分的后两行第三个参数:row+w/2,较row下移了w/2个单位长度

所以我们想打印前面几行的*,必须将row+w/2这第三个参数缩小。缩小多少呢?可以先预估第三个行参数可能为row。
4.接着我们再分析第四个参数 col 列参数:
当我们注释掉最后一个f递归语句(如下图)

运行结果是这样的:

我们发现,只在第一列上打印了*,而之前有这一行时打印了4列。
说明第四个参数也就是col这个,是控制”列“的,我们必须增加col这个参数的值
那么,col这一列要增加多少呢?之前row都是增加w/2,这里也直接预估参数增加了w/2,即col+w/2
填入f(a, rank-1, row, col+w/2);运行程序结果正确!

#include<stdio.h>
#include<iostream>
using namespace std;
#define N 10
void f(char a[][N], int rank, int row, int col)
{
if(rank==1){
cout<<"row = "<<row<<" col= "<<col<<endl;
a[row][col] = '*';
return;
}
int w = 1;
int i;
for(i=0; i<rank-1; i++) {
w *= 2;
}
f(a, rank-1, row, col+w/2); //填空 当前行
f(a, rank-1, row+w/2, col);
f(a, rank-1, row+w/2, col+w);
}
int main()
{
char a[N][N];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++) a[i][j] = ' ';
f(a,3,0,0);
for(i=0; i<N; i++){
for(j=0; j<N; j++) printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
打印图形|2014年蓝桥杯B组题解析第五题-fishers的更多相关文章
- 啤酒和饮料|2014年蓝桥杯B组题解析第一题-fishers
啤酒和饮料|2014年第五届蓝桥杯B组题解析第一题-fishers 啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请 ...
- 奇怪的分式|2014年蓝桥杯B组题解析第六题-fishers
奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念 ...
- 第六届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...
- 第六届蓝桥杯JavaA组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有 ...
- 前缀判断|2013年蓝桥杯B组题解析第五题-fishers
前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 &quo ...
- 第九届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) 求该三角 ...
- 第五届蓝桥杯JavaA组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个 ...
- 0-1背包dp|波动数列|2014年蓝桥杯A组10-fishers
标题:波动数列 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a ...
- 地宫取宝|2014年蓝桥杯B组题解析第九题-fishers
地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
随机推荐
- 数据库bcp导入导出批处理工具
应公司策划要求,需要一个数据库按表导入导出的工具配合svn来进行差异匹配,方便策划每天对数据库修改的记录工具,我使用bcp命令实现如下批处理工具,中间踩了不少坑,现保存在这边希望可以帮到需要此工具的同 ...
- kubernetes实战(十五):k8s使用helm持久化部署jenkins集成openLDAP登录
1.基本概念 Jenkins在DevOps工具链中是核心的流程管理中心,负责串联系统的构建流程.测试流程.镜像制作流程.部署流程等,在持续集成中常用到的工具如下: Maven:源代码编译工具 Robo ...
- 对SQL SERVER数据类型理解最好的一篇文章
字符串前加N SQL SERVER中生成的语句中,字符串前加N,N 前缀必须是大写字母,是Unicode编码的意思. 一般来说,英文字符是一个字节组成,但是国际上的字太多了,因此就用两个字节来表示字符 ...
- GitLab修改时区
https://yq.aliyun.com/articles/275765 一.背景 今天有同事在GitLab上查看时间的时候,发现GitLab上显示的时间和提交的时间不一致. 本地时间现在为:201 ...
- Bug笔记:Google Map第一次缩放位置偏移
这是个让人蛋疼的bug,认真查看Google maps API文档的童鞋们一定不会碰到. 我的同事为项目写了个针对map这块的jQuery plugin,然后在项目测试中发现,刚加载完页面时,直接点击 ...
- ext3日志模式
ext3日志模式 http://blog.sina.com.cn/s/blog_5d4ab4b40100dosx.html ext3支持多种日志模式 ext3 是ext2文件系统的高一级版本,完全兼容 ...
- vue学习之npm
任何一门计算机语言都包含了丰富的第三方库,npm就是JavaScript这门语言的第三方库管理工具,本文详细介绍了JavaScript的包管理工具,npm. 在计算机中安装好Node.js之后,默认已 ...
- POJ1258:Agri-Net(最小生成树模板题)
http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One of hi ...
- isKindOfClass isMemeberOfClass 的区分
isKindOfClass If you use such constructs in your code, you might think it is alright to modify an ob ...
- pandas使用drop_duplicates去除DataFrame重复项
DataFrame中存在重复的行或者几行中某几列的值重复,这时候需要去掉重复行,示例如下: data.drop_duplicates(subset=['A','B'],keep='first',inp ...