Cerința
Fie n
un număr natural nenul, mulțimea A={1,2,3,...,n}
și un număr m
, 1 ≤ m ≤ n
. Să se determine toate partițiile disjuncte ale mulțimii A
, formate din exact m
submulțimi.
O partiție a mulțimii A
este formată din k
(1 ≤ k ≤ n
) submulțimi disjuncte ale lui A
: A
1
, A
2
, …, A
k
cu proprietatea că A=A
1
U A
2
U...U A
k
.
Date de intrare
Fișierul de intrare pm.in
conține pe prima linie numere n m
.
Date de ieșire
Fișierul de ieșire pm.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 ≤ m ≤ n ≤ 9
- Partițiile determinate se vor afișa în ordine lexicografică
Exemplu
pm.in
3 2
pm.out
12*3* 13*2* 1*23*
Explicație
Mulțimea A
are 5
partiții:
{1,2,3}
{1,2} U {3}
{1,3} U {2}
{1} U {2,3}
{1} U {2} U {3}
Dintre acestea, doar ({1,2} U {3})
, ({1,3} U {2})
, ({1} U {2,3})
sunt formate din m=2
multimi.
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 PartitiiMultime1:
#include <fstream>
#include <iostream>
using namespace std;
int x[10], n, m;
ofstream fout("pm.out");
ifstream fin("pm.in");
int maxim(int k)
{
int i , z = 0;
for(i = 1 ; i <= k ; i++)
z = max(x[i] , z);
return z;
}
void scrie(ostream & out)
{
int z = maxim(n);
for(int i = 1 ; i <= z ; i ++)
{
for(int j = 1 ; j <= n ; j ++)
if(x[j] == i)
out << j;
out << "*";
}
out << '\n';
}
void back(int k)
{
int s = maxim(k - 1);
if(s > m)
return;
for(int i = 1; i <= s + 1 ; i++)
{
x[k] = i;
if(k == n)
{
if(maxim(n) == m)
scrie(fout);
}
else
back(k + 1);
}
}
int main()
{
fin >> n >> m;
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 #3168 PartitiiMultime1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3168 PartitiiMultime1 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!