返回顶部

南蛮图腾

#include <bits/stdc++.h>
using namespace std;
int n;
char a[10000][10000];
int h = 2, w = 4; // 储存初始三角形的大小
void print()
{

    for (int i = 1; i <= h; i++)
    {
        for (int j = 1; j <= w; j++)
        {
            cout << a[i][j];
        }
        cout << endl;
    }
}
void solve()
{
    for (int i = 1; i < n; i++)
    {
        // 左边和右边
        for (int j = 1; j <= h; j++)
        {
            for (int k = 1; k <= w; k++)
            {
                a[j + h][k] = a[j + h][k + w] = a[j][k];
                a[j][k] = ' '; // 清除原来的三角形
            }
        }
        // 上面的
        for (int j = 1; j <= h; j++)
        {
            for (int k = 1; k <= w; k++)
            {
                a[j][k + w / 2] = a[j + h][k];
            }
        }
        w *= 2, h *= 2;
    }
}
void init()
{
    memset(a, ' ', sizeof(a)); // 全部初始化
    a[1][1] = a[1][4] = ' '; // 储存初始时的三角形
    a[1][2] = a[2][1] = '/';
    a[1][3] = a[2][4] = '\\';
    a[2][2] = a[2][3] = '_';
}
int main()
{
    cin >> n;
   	 // 三步简单明了
    init(); // 初始化
    solve(); // 解决
    print(); // 输出
    // system("pause");
}

本来想要贴图片的但是不行啊。

至于为什么是a[j+h][k]a[j+h][k+w]是因为分别往下方和右下移动

a[j+h][k+w/2]就是向右移动一半。

画图理解

首发于:https://www.luogu.com.cn/blog/zrc4889/

posted @ 2022-01-08 22:24  zrc4889  阅读(50)  评论(0编辑  收藏  举报