您的位置:首页 > 其它

HRBUST 2085 囧 分型法

2016-03-23 14:51 302 查看
题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2085

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int mapsize = 1000;
void draw(const int n, char map[][mapsize], const int r, const int c)
{
int size = (1 << (n + 2));
map[r][c] = map[r + size - 1][c + size - 1] = map[r][c + size - 1] = map[r + size - 1][c] = '+';
for (int i = 1; i < size - 1; i++)
{
map[r][c + i] = map[r + size - 1][c + i] = '-';
map[r + i][c] = map[r + i][c + size - 1] = '|';
}

if (n == 0) return;

for (int i = 2; i < size / 2 - 1; i++)
{
map[r + i][c + size / 2 - i] = '/';
map[r + i][c + size / 2 + i - 1] = '\\';
}

draw(n - 1, map, r + size / 2, c + size / 4);
}

int main()
{
int casenum;
cin >> casenum;
while (casenum--)
{
int n;
static char map[mapsize][mapsize];
cin >> n;

memset(map,' ', sizeof(map));

draw(n, map, 0, 0);

int size = (1 << (n + 2));

for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
printf("%c",map[i][j]);
printf("\n");
}
//        putchar(10);
}
return 0;
}


分析:

以前的分型是从一个小图形为基础即从1(++)开始,这道题直接从n(--)开始,把最大的图形打印出来,递归再把它的子图形打印出来。

刚开始只知道根分型法有关,不对呀,我操,根第一句话没关系呀,能从大图形打印出小图形,就能从小图形打印出大图形。

智商-100。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: