题解 P1498 【南蛮图腾】

· · 题解

递推即可。这里我采用了把图腾倒放,每次扩大时把原图腾向右复制一个,再向右下复制一个,最后倒置输出即可

#include <iostream>
#include <string.h>
using namespace std;
int n,x,y;
char a[3000][3000];
void copy(int &u, int &v) {  //复制图腾,递推
    int i, j;
    for (i = 1; i <= u; i++)
        for (j = 1; j <= v; j++)
            a[i][v + j] = a[u + i][(v / 2) + j] = a[i][j];
    u *= 2;
    v *= 2;
}
int main(){
    memset(a, ' ', sizeof(a));
    a[1][1] = a[2][2] = '\\';
    a[1][2] = a[1][3] = '_';
    a[1][4] = a[2][3] = '/';   //初始化基础图腾
    x = 2; y = 4;
    cin >> n;
    for (int i = 1; i < n; i++) copy(x, y);  //递推n-1次
    for (int i = x; i > 0; i--) {
        for (int j = y; j > 0; j--) cout << a[i][j];//倒置输出
        cout << endl;
    }
    return 0;
}