#include <iostream>
using namespace std;
// Funkcja rekurencyjna rysująca zbiór Cantora
void cantor(int x, int y, int length, int depth, char canvas[][200]) {
if (depth == 0) return;
// Rysuj linię
for (int i = x; i < x + length; i++) {
canvas[y][i] = '#';
}
// Rekurencja dla lewej i prawej części
int newLength = length / 3;
cantor(x, y + 2, newLength, depth - 1, canvas);
cantor(x + 2 * newLength, y + 2, newLength, depth - 1, canvas);
}
int main() {
int depth;
cout << "Podaj stopien zbioru Cantora (np. 3 lub 6): ";
cin >> depth;
const int WIDTH = 200;
const int HEIGHT = 50;
// Tablica do rysowania
char canvas[HEIGHT][WIDTH];
// Wypełnij spacjami
for (int i = 0; i < HEIGHT; i++)
for (int j = 0; j < WIDTH; j++)
canvas[i][j] = ' ';
// Start rysowania
cantor(0, 0, WIDTH, depth, canvas);
// Wyświetlanie
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
cout << canvas[i][j];
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVua2NqYSByZWt1cmVuY3lqbmEgcnlzdWrEhWNhIHpiacOzciBDYW50b3JhCnZvaWQgY2FudG9yKGludCB4LCBpbnQgeSwgaW50IGxlbmd0aCwgaW50IGRlcHRoLCBjaGFyIGNhbnZhc1tdWzIwMF0pIHsKICAgIGlmIChkZXB0aCA9PSAwKSByZXR1cm47CgogICAgLy8gUnlzdWogbGluacSZCiAgICBmb3IgKGludCBpID0geDsgaSA8IHggKyBsZW5ndGg7IGkrKykgewogICAgICAgIGNhbnZhc1t5XVtpXSA9ICcjJzsKICAgIH0KCiAgICAvLyBSZWt1cmVuY2phIGRsYSBsZXdlaiBpIHByYXdlaiBjesSZxZtjaQogICAgaW50IG5ld0xlbmd0aCA9IGxlbmd0aCAvIDM7CgogICAgY2FudG9yKHgsIHkgKyAyLCBuZXdMZW5ndGgsIGRlcHRoIC0gMSwgY2FudmFzKTsKICAgIGNhbnRvcih4ICsgMiAqIG5ld0xlbmd0aCwgeSArIDIsIG5ld0xlbmd0aCwgZGVwdGggLSAxLCBjYW52YXMpOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBkZXB0aDsKCiAgICBjb3V0IDw8ICJQb2RhaiBzdG9waWVuIHpiaW9ydSBDYW50b3JhIChucC4gMyBsdWIgNik6ICI7CiAgICBjaW4gPj4gZGVwdGg7CgogICAgY29uc3QgaW50IFdJRFRIID0gMjAwOwogICAgY29uc3QgaW50IEhFSUdIVCA9IDUwOwoKICAgIC8vIFRhYmxpY2EgZG8gcnlzb3dhbmlhCiAgICBjaGFyIGNhbnZhc1tIRUlHSFRdW1dJRFRIXTsKCiAgICAvLyBXeXBlxYJuaWogc3BhY2phbWkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSEVJR0hUOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXSURUSDsgaisrKQogICAgICAgICAgICBjYW52YXNbaV1bal0gPSAnICc7CgogICAgLy8gU3RhcnQgcnlzb3dhbmlhCiAgICBjYW50b3IoMCwgMCwgV0lEVEgsIGRlcHRoLCBjYW52YXMpOwoKICAgIC8vIFd5xZt3aWV0bGFuaWUKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSEVJR0hUOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFdJRFRIOyBqKyspIHsKICAgICAgICAgICAgY291dCA8PCBjYW52YXNbaV1bal07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==