Rezolvare completă PbInfo #1330 PartitiiMultime

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: A1, A2, …, Am cu proprietatea că A=A1U A2 U...U Am.

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. {1,2,3}
  2. {1,2} U {3}
  3. {1,3} U {2}
  4. {1} U {2,3}
  5. {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 Adresa de email.

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!