#include <iostream> #include <vector> using namespace std; // Funkcja rekurencyjna rysująca zbiór Cantora void cantor(vector<string>& canvas, int level, int left, int right, int height) { if (level == 0) { // rysujemy odcinek for (int i = left; i <= right; i++) { canvas[height][i] = '#'; } return; } int third = (right - left + 1) / 3; // Lewa część cantor(canvas, level - 1, left, left + third - 1, height + 1); // Prawa część cantor(canvas, level - 1, right - third + 1, right, height + 1); } int main() { int n; cout << "Podaj stopien zbioru Cantora (np. 3 lub max 6): "; cin >> n; if (n < 0 || n > 6) { cout << "Stopien musi byc z zakresu 0-6!" << endl; return 1; } int width = 1; for (int i = 0; i < n; i++) { width *= 3; // 3^n } vector<string> canvas(n + 1, string(width, ' ')); // Rysujemy pierwszy (pełny) odcinek for (int i = 0; i < width; i++) { canvas[0][i] = '#'; } // Rekurencja cantor(canvas, n, 0, width - 1, 0); // Wyświetlanie for (const auto& row : canvas) { cout << row << endl; } return 0; }
6
Podaj stopien zbioru Cantora (np. 3 lub max 6): #########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #