HRBUST 2085 囧 分型法
2016-03-23 14:51
302 查看
题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2085
代码:
分析:
以前的分型是从一个小图形为基础即从1(++)开始,这道题直接从n(--)开始,把最大的图形打印出来,递归再把它的子图形打印出来。
刚开始只知道根分型法有关,不对呀,我操,根第一句话没关系呀,能从大图形打印出小图形,就能从小图形打印出大图形。
智商-100。
代码:
#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。
相关文章推荐
- Java基础 transient关键字
- Servlet的特点及运行过程
- linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)
- 【jQuery源码】整体架构
- iOS开发小技巧
- 根据用户身份证获取信息(php)
- 初始javascript闭包
- 【bzoj3675】[Apio2014]序列分割 单调队列+斜率优化
- 使用DOM方法递归遍历节点树
- MPEG-4, moving picture expert group 避免软弱无力的表达
- ios关于数据库第三方框架FMDB进阶用法
- 一致性哈希算法与Java实现
- gitlab 的从分支提交过程 --梁泽
- maven增加Spring
- 注释嵌入式软件的十大技巧
- 详解Android中ViewPager的PagerTabStrip子控件的用法
- SQL存储过程展易飞BOM
- 常用正则表达式
- 嵌入式linux的系统搭建与配置
- NetBeans中文乱码解决办法