Cerința
Se dă un număr natural n. Să se genereze o matrice pătratică de ordinul 3n, cu elemente din mulțimea {0, 1}, după modelul covorului lui Sierpinski.
Date de intrare
Fișierul de intrare sierpinski.in conține pe prima linie numărul n.
Date de ieșire
Fișierul de ieșire sierpinski.out va conține pe primele 3n linii câte 3n cifre binare, reprezentând elementele matricei.
Restricții și precizări
1 ≤ n ≤ 6- Atenție la limita de memorie!
Exemplu
sierpinski.in
2
sierpinski.out
0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
Explicație
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Sierpinski:
#include <bits/stdc++.h>
#define DMAX 730
using namespace std;
ifstream fin("sierpinski.in");
ofstream fout("sierpinski.out");
vector< vector<bool> > a(DMAX);
int n, w;
/// Functia care initializeaza "matricea":
void init() {
for (int i = 1; i < DMAX; i++)
a[i].resize(DMAX);
}
/// Functia recursiva:
void draw(int x, int y, int w) {
int pe3 = w / 3; // "Umplem" cu 1 patratul din mijloc:
for (int i = x + pe3; i <= x + 2 * pe3 - 1; i++)
for (int j = y + pe3; j <= y + 2 * pe3 - 1; j++)
a[i][j] = true;
// Dupa ce am format patrate de lungime minima (1), ne oprim:
if (pe3 == 1)
return;
// Umplem cele 8 patrate:
draw(x , y , pe3);
draw(x , y + pe3, pe3);
draw(x , y + 2 * pe3, pe3);
draw(x + pe3, y , pe3);
draw(x + pe3, y + 2 * pe3, pe3);
draw(x + 2 * pe3, y , pe3);
draw(x + 2 * pe3, y + pe3, pe3);
draw(x + 2 * pe3, y + 2 * pe3, pe3);
}
int main() {
fin >> n;
w = pow(3, n);
init();
draw(1, 1, w);
for (int i = 1; i <= w; i++) {
for (int j = 1; j <= w; j++)
fout << a[i][j] << ' ';
fout << '\n';
}
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #2082 Sierpinski
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2082 Sierpinski de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!