南蛮图腾
#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]
就是向右移动一半。
画图理解