아름답네요 별 찍기 18
재귀함수를 썼습니다.
N의 크기에 따라 규칙을 찾아야 합니다.
N의 높이는 2 ^ i - 1입니다.
위의 식으로 행 좌표를 구하면서 재귀함수를 호출합니다.
열 범위도 구해서 별을 찍어주면 저런 예쁜 모양이 나옵니다 하하
N이 홀수, 짝수에 따라 모양이 다르고 인덱스가 달라지기 때문에 구별해서 구현하시면 됩니다.
다른 부분은 이제 구현만 마무리 잘하시면 될 것 같습니다. 구현만 하면 되는 문제라…
구현을 하는데 어려움이 있으시면 코드를 보고 참고하세요!
#include <bits/stdc++.h>
#define FIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define FOR(a,b,c) for(int a = (b); a <= (c); a++)
using namespace std;
int main() {
FIO;
char map[1 << 10][1 << 11] = {};
int n; cin >> n;
function <void(int, int)> f = [&](int r, int d) {
if (!d) return;
int mid = (1 << n) - 2, h = (1 << d) - 2;
FOR(i, 0, h) {
int x = d & 1 ? i : h - i;
FOR(j, mid - h, mid + i) {
if (j == mid + i || j == mid - i || i == h)
map[r + x][j] = '*';
else map[r + x][j] = ' ';
}
}
f(d & 1 ? r + (h >> 1) : r + 1, d - 1);
};
f(0, n);
FOR(i, 0, (1 << n) - 2)
cout << map[i] << '\n';
return 0;
}