Cerința
Fie n
un număr natural nenul și mulțimea A={1,2,3,...,n}
. Să se determine toate partițiile disjuncte ale mulțimii A
.
O partiție a mulțimii A
este formată din m
(1 ≤ m ≤ n
) submulțimi disjuncte ale lui A
: A
1
, A
2
, …, A
m
cu proprietatea că A=A
1
U A
2
U...U A
m
.
Date de intrare
Fișierul de intrare partitiimultime.in
conține pe prima linie numărul n
.
Date de ieșire
Fișierul de ieșire partitiimultime.out
va conține câte o linie pentru fiecare partiție determinată. Submulțimile vor fi separate în fiecare linie cu ajutorul caracterului *
, iar elementele fiecărei submulțimi se vor scrie fără spațiere, ca în exemplul de mai jos.
Restricții și precizări
1 ≤ n ≤ 9
- Partițiile determinate se vor afișa în ordine lexicografică
Exemplu
partitiimultime.in
3
partitiimultime.out
123* 12*3* 13*2* 1*23* 1*2*3*
Explicație
Sunt determinate 5
partiții distincte ale mulțimii A
.
{1,2,3}
{1,2} U {3}
{1,3} U {2}
{1} U {2,3}
{1} U {2} U {3}
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 PartitiiMultime:
//partitiile unei multimi
#include <fstream>
using namespace std;
int x[10], n;
ofstream g("partitiimultime.out");
ifstream f("partitiimultime.in");
int maxim(int k)
{int i,z=0;
for(i=1;i<k;i++)
z=max(x[i],z);
return z;
}
void scrie()
{ int i,z,j;
z=maxim(n+1);
for(i=1;i<=z;i++)
{ for(j=1;j<=n;j++)
if(x[j]==i)g<<j;
g<<"*";
}
g<<endl;}
void back(int k)
{ if(k==n+1)scrie();
else
for(int i=1; i<=maxim(k)+1;i++)
{ x[k]=i;
back(k+1);}
}
int main()
{ f>>n;
x[1]=1;
back(2);
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 #1330 PartitiiMultime
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1330 PartitiiMultime 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!