蓝桥杯 回型嵌套 递归 解题报告
2015-02-28 22:41
148 查看
观察这个图形,它是由一系列正方形的星号方框嵌套而成。
在上边的例子中,最外方框的边长为11。
本题的任务就是从标准输入获得一个整数n(1<n<100)
程序则生成嵌套着的回字型星号方框。其最外层方框的边长为n
例如:
输入:
5
程序输出:
输入:6
程序输出:
记得以前做过一个类似的打印图形的的题目,都是大图套小图,这种题目首先要找到规律,然后再确定要使用的方法,对于这种打印嵌套相似图形的题目,一般都是使用递归,因为循环的话不好控制循环层数,首先递归到最底层,然后打印最里面的图形,然后回溯打印外面的图形,规律也很容易看到,每次向里面走一层,边长就减4,然后再看每个图形左上角的起点,如果第一个起点为(0,0),第二个是(2,2),第三个是(4,4)。。。以此类推,有了起点,有了边长,就可以很轻松的打印出每一个图形,在打印图形的时候,可以单独处理第一行和最后一行,因为这两行是需要全部打印的,中间的部分只要打印两个点就可以了,这种处理方法可以应对所有的情况,包括只打印一个字符和打印四个字符这两种比较特别的情况,处理之前,要先把整个二维数组初始化成空格,这样就不用处理整个图形中的空格了。
#include<iostream>
using namespace std;
char map[101][101];
void paint(int len,int time)
{
if(len<=0)
return;
paint(len-4,time+1);
int x;
int i,j;
x=2*time;
for(i=x;i<x+len;i++)
map[x][i]='*';
for(i=x+1;i<x+len-1;i++)
map[i][x]=map[i][x+len-1]='*';
for(i=x;i<x+len;i++)
map[x+len-1][i]='*';
}
void init()
{
int i,j;
for(i=0;i<101;i++)
for(j=0;j<101;j++)
map[i][j]=' ';
}
int main()
{
int n;
int i,j;
while(cin>>n)
{
init();
paint(n,0);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<map[i][j];
cout<<endl;
}
}
return 0;
}
相关文章推荐
- 蓝桥杯 2的次幂表示 解题报告(递归)
- 蓝桥杯---打印回型嵌套(简单递归)
- 蓝桥杯 购物券消费方案 递归暴力 解题报告
- 蓝桥杯 砝码称重 递归 解题报告
- 2012蓝桥杯 初赛解题报告
- 第九届蓝桥杯选拔赛C语言组 解题报告索引
- 【解题报告】嵌套矩形
- 2012年第三届蓝桥杯预赛详细解题报告
- 第六届蓝桥杯C/C++第10题生命之树解题报告
- 第四届蓝桥杯C++本科B组决赛解题报告
- 蓝桥杯 花朵数 解题报告
- 南阳 990 蚂蚁感冒 第五届蓝桥杯 解题报告
- 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
- 蓝桥杯 循环小数 模拟除法 解题报告
- 运行时间排列第四届蓝桥杯C++本科B组解题报告
- 第四届蓝桥杯本科A组解题报告(和B组相同的题目详见B组解题报告)
- 第六届蓝桥杯校园选拔赛试题---派遣敢死队 解题报告
- 蓝桥杯 地址转换 解题报告
- 第四届 蓝桥杯 第八题 翻硬币 贪心 解题报告
- 第八届 蓝桥杯 Java B组 承压计算 解题报告