Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 2

2.

Generarea submultimilor unei multimi


ENUNT : Fie n numar natural nenul. Scrieti un program de generare a
tuturor submultimilor multimii {1, 2, 3,..., n}.
EXEMPLU: Pentru n=3 programul va genera
{}
{1} {2} {3}
{1,2} {1,3} {2,3}
{1,2,3}
SOLUTIE:
I. Solutia x[1]......x[n]
- x[i] poate fi 0 (i nu apartine submultii) sau 1 (i apartine
submultimii)

Solutia
{}
{3}
{2}
{2,3}
{1}
{1,3}
{1,2}
{1,2,3}

Codificare
000
001
010
011
100
101
110
111

II. x[k] poate fi 0 sau 1


III. Valid - nu este necesar

Implementare
#include<iostream>
using namespace std;
char sp[]="

";

int x[20], n, nrsol=0;


void Afisare()
{ int i;
cout<<sp<<"{ ";
for(i=1;i<=n;i++)
if (x[i]==1) cout<<i<<" ";
cout<<char(8)<<"}"<<endl;
nrsol++;
if (nrsol%22==0) cin.get();
}
void BackRec(int k)
{ int i;
for(i=0;i<=1;i++)
{ x[k]=i;
if (k==n) Afisare();
else BackRec(k+1);
}
}

int main()
{ cout<<endl<<endl<<sp<<"Submultimile multimii {1,2,3.....,n}"<<endl;
cout<<endl<<sp<<" Dati valoarea lui n: "; cin>>n;
cout<<endl;
BackRec(1);
cout<<endl<<sp<<"Numar solutii: "<<nrsol;
return 0;
}
sau
#include<iostream.h>
int n,s[100];
void init(int k){
s[k]=-1;}
int succesor(int k)
{
if(s[k]<1)
{s[k]=s[k]+1; return 1;}
else return 0;}
int valid()
{
return 1;}
int solutie(int k)
{
return k==n;}
void tipar()
{int i,x=0;
cout<<"{";
for(i=1;i<=n;i++)
if(s[i]==1)
{cout<<i<<",";
x=1;}
if(x) cout<<'\b';
cout<<"}"<<endl;}
void bt(int k)
{
init(k);
while(succesor(k))
if(valid())
if(solutie(k)) tipar();
else bt(k+1);}
void main()
{
cout<<"n=";cin>>n;
bt(1);}

You might also like