#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): ";
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+JiBsaW5lLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKICAgIGlmIChsZW5ndGggPCAzKSByZXR1cm47CgogICAgaW50IHRoaXJkID0gbGVuZ3RoIC8gMzsKCiAgICAvLyB1c3XFhCDFm3JvZGtvd8SFIGN6xJnFm8SHICh6YW1pZcWEIG5hIHNwYWNqZSkKICAgIGZvciAoaW50IGkgPSBzdGFydCArIHRoaXJkOyBpIDwgc3RhcnQgKyAyICogdGhpcmQ7IGkrKykgewogICAgICAgIGxpbmVbaV0gPSAnICc7CiAgICB9CgogICAgLy8gcmVrdXJlbmNqYSBkbGEgbGV3ZWogaSBwcmF3ZWogY3rEmcWbY2kKICAgIGdlbmVyYXRlQ2FudG9yKGxpbmUsIHN0YXJ0LCB0aGlyZCk7CiAgICBnZW5lcmF0ZUNhbnRvcihsaW5lLCBzdGFydCArIDIgKiB0aGlyZCwgdGhpcmQpOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBzdG9waWVuOwoKICAgIGNvdXQgPDwgIlBvZGFqIHN0b3BpZW4gemJpb3J1IENhbnRvcmEgKG5wLiAzIGx1YiA2KTogIjsKICAgIGNpbiA+PiBzdG9waWVuOwoKICAgIGlmIChzdG9waWVuIDwgMCB8fCBzdG9waWVuID4gOCkgewogICAgICAgIGNvdXQgPDwgIlBvZGFqIHN0b3BpZW4gdyB6YWtyZXNpZSAw4oCTOCEiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gZMWCdWdvxZvEhyA9IDNec3RvcGllbgogICAgaW50IGxlbmd0aCA9IDE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0b3BpZW47IGkrKykgewogICAgICAgIGxlbmd0aCAqPSAzOwogICAgfQoKICAgIC8vIHR3b3J6eW15IGxpbmnEmSBwb2N6xIV0a293xIUKICAgIHZlY3RvcjxjaGFyPiBsaW5lKGxlbmd0aCwgJy0nKTsKCiAgICAvLyBnZW5lcnVqZW15IHpiacOzciBDYW50b3JhCiAgICBnZW5lcmF0ZUNhbnRvcihsaW5lLCAwLCBsZW5ndGgpOwoKICAgIC8vIHd5cGlzdWplbXkgd3luaWsKICAgIGZvciAoY2hhciBjIDogbGluZSkgewogICAgICAgIGNvdXQgPDwgYzsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==