链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2085
n == 1 时:
+------+ | | | / \ | | | | +--+ | | | | | | | | | +-+--+-+n == 2 时:
+--------------+ | | | / \ | | / \ | | / \ | | / \ | | / \ | | | | +------+ | | | | | | | / \ | | | | | | | | +--+ | | | | | | | | | | | | | | +---+-+--+-+---+有T组测试数据,每组数据包含一个n,输出对应的图形;
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 1000 using namespace std; void draw(const int n, char map[][MAXN], 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 cas, n; scanf("%d", &cas); while(cas--) { static char map[MAXN][MAXN]; scanf("%d", &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++) putchar(map[i][j]); putchar(10); } } return 0; }
原文:http://blog.csdn.net/keshacookie/article/details/22992453