#include <iostream>
#include <vector>
using namespace std;
// Funkcja generująca jedną linię zbioru Cantora
void generateCantor(vector<char>& line, int start, int length) {
if (length < 3) return;
int third = length / 3;
// usuń środkową część (zamień na spacje)
for (int i = start + third; i < start + 2 * third; i++) {
line[i] = ' ';
}
// rekurencja dla lewej i prawej części
generateCantor(line, start, third);
generateCantor(line, start + 2 * third, third);
}
int main() {
int stopien;
cout << "Podaj stopien zbioru Cantora (np. 3 lub 6): 3 ";
cin >> stopien;
if (stopien < 0 || stopien > 8) {
cout << "Podaj stopien w zakresie 0–8!" << endl;
return 1;
}
// długość = 3^stopien
int length = 1;
for (int i = 0; i < stopien; i++) {
length *= 3;
}
// tworzymy linię początkową
vector<char> line(length, '-');
// generujemy zbiór Cantora
generateCantor(line, 0, length);
// wypisujemy wynik
for (char c : line) {
cout << c;
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVua2NqYSBnZW5lcnVqxIVjYSBqZWRuxIUgbGluacSZIHpiaW9ydSBDYW50b3JhCnZvaWQgZ2VuZXJhdGVDYW50b3IodmVjdG9yPGNoYXI+JiBsaW5lLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKICAgIGlmIChsZW5ndGggPCAzKSByZXR1cm47CgogICAgaW50IHRoaXJkID0gbGVuZ3RoIC8gMzsKCiAgICAvLyB1c3XFhCDFm3JvZGtvd8SFIGN6xJnFm8SHICh6YW1pZcWEIG5hIHNwYWNqZSkKICAgIGZvciAoaW50IGkgPSBzdGFydCArIHRoaXJkOyBpIDwgc3RhcnQgKyAyICogdGhpcmQ7IGkrKykgewogICAgICAgIGxpbmVbaV0gPSAnICc7CiAgICB9CgogICAgLy8gcmVrdXJlbmNqYSBkbGEgbGV3ZWogaSBwcmF3ZWogY3rEmcWbY2kKICAgIGdlbmVyYXRlQ2FudG9yKGxpbmUsIHN0YXJ0LCB0aGlyZCk7CiAgICBnZW5lcmF0ZUNhbnRvcihsaW5lLCBzdGFydCArIDIgKiB0aGlyZCwgdGhpcmQpOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBzdG9waWVuOwoKICAgIGNvdXQgPDwgIlBvZGFqIHN0b3BpZW4gemJpb3J1IENhbnRvcmEgKG5wLiAzIGx1YiA2KTogMyAiOwogICAgY2luID4+IHN0b3BpZW47CgogICAgaWYgKHN0b3BpZW4gPCAwIHx8IHN0b3BpZW4gPiA4KSB7CiAgICAgICAgY291dCA8PCAiUG9kYWogc3RvcGllbiB3IHpha3Jlc2llIDDigJM4ISIgPDwgZW5kbDsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBkxYJ1Z2/Fm8SHID0gM15zdG9waWVuCiAgICBpbnQgbGVuZ3RoID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RvcGllbjsgaSsrKSB7CiAgICAgICAgbGVuZ3RoICo9IDM7CiAgICB9CgogICAgLy8gdHdvcnp5bXkgbGluacSZIHBvY3rEhXRrb3fEhQogICAgdmVjdG9yPGNoYXI+IGxpbmUobGVuZ3RoLCAnLScpOwoKICAgIC8vIGdlbmVydWplbXkgemJpw7NyIENhbnRvcmEKICAgIGdlbmVyYXRlQ2FudG9yKGxpbmUsIDAsIGxlbmd0aCk7CgogICAgLy8gd3lwaXN1amVteSB3eW5pawogICAgZm9yIChjaGFyIGMgOiBsaW5lKSB7CiAgICAgICAgY291dCA8PCBjOwogICAgfQogICAgY291dCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9