Cerința
Se dă un număr natural n
. Să se genereze o matrice pătratică de ordinul 3
n
, 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 3
n
linii câte 3
n
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!