#include <iostream>
#include <vector>
using namespace std;
// Funkcja rekurencyjna zaznaczająca odcinki Cantora
void cantor(vector<string>& canvas, int level, int left, int right, int row) {
if (level == 0) {
for (int i = left; i <= right; i++) {
canvas[row][i] = '#';
}
return;
}
int third = (right - left + 1) / 3;
// Lewa część
cantor(canvas, level - 1, left, left + third - 1, row);
// Prawa część
cantor(canvas, level - 1, right - third + 1, right, row);
}
int main() {
const int maxLevel = 6;
// szerokość = 3^6 = 729
int width = 1;
for (int i = 0; i < maxLevel; i++) {
width *= 3;
}
vector<string> canvas(maxLevel + 1, string(width, ' '));
// Generowanie wszystkich poziomów od 0 do 6
for (int level = 0; level <= maxLevel; level++) {
cantor(canvas, level, 0, width - 1, level);
}
// Wyświetlanie
for (int i = 0; i <= maxLevel; i++) {
cout << "Stopien " << i << ":" << endl;
cout << canvas[i] << endl << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVua2NqYSByZWt1cmVuY3lqbmEgemF6bmFjemFqxIVjYSBvZGNpbmtpIENhbnRvcmEKdm9pZCBjYW50b3IodmVjdG9yPHN0cmluZz4mIGNhbnZhcywgaW50IGxldmVsLCBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgcm93KSB7CiAgICBpZiAobGV2ZWwgPT0gMCkgewogICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHsKICAgICAgICAgICAgY2FudmFzW3Jvd11baV0gPSAnIyc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgdGhpcmQgPSAocmlnaHQgLSBsZWZ0ICsgMSkgLyAzOwoKICAgIC8vIExld2EgY3rEmcWbxIcKICAgIGNhbnRvcihjYW52YXMsIGxldmVsIC0gMSwgbGVmdCwgbGVmdCArIHRoaXJkIC0gMSwgcm93KTsKCiAgICAvLyBQcmF3YSBjesSZxZvEhwogICAgY2FudG9yKGNhbnZhcywgbGV2ZWwgLSAxLCByaWdodCAtIHRoaXJkICsgMSwgcmlnaHQsIHJvdyk7Cn0KCmludCBtYWluKCkgewogICAgY29uc3QgaW50IG1heExldmVsID0gNjsKCiAgICAvLyBzemVyb2tvxZvEhyA9IDNeNiA9IDcyOQogICAgaW50IHdpZHRoID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGV2ZWw7IGkrKykgewogICAgICAgIHdpZHRoICo9IDM7CiAgICB9CgogICAgdmVjdG9yPHN0cmluZz4gY2FudmFzKG1heExldmVsICsgMSwgc3RyaW5nKHdpZHRoLCAnICcpKTsKCiAgICAvLyBHZW5lcm93YW5pZSB3c3p5c3RraWNoIHBvemlvbcOzdyBvZCAwIGRvIDYKICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4TGV2ZWw7IGxldmVsKyspIHsKICAgICAgICBjYW50b3IoY2FudmFzLCBsZXZlbCwgMCwgd2lkdGggLSAxLCBsZXZlbCk7CiAgICB9CgogICAgLy8gV3nFm3dpZXRsYW5pZQogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbWF4TGV2ZWw7IGkrKykgewogICAgICAgIGNvdXQgPDwgIlN0b3BpZW4gIiA8PCBpIDw8ICI6IiA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgY2FudmFzW2ldIDw8IGVuZGwgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==