Sunteți pe pagina 1din 8

COMBINARI

#include <iostream>

using namespace std;

int st[100],n,p,x=0;

int valid(int k)

{int i;

for (i=1;i<k;i++)

if(st[k]==st[i] ) return 0;

return 1;

void tipar()

x++; cout<<x<<".";

for(int i=1; i<=p; i++)

cout<<st[i]<<" ";

cout<<endl;

void back(int k)

for(int i=st[k-1]+1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);
}

int main()

cin>>n>>p;

back(1);

Modificati programul astfel sa se citeasca din fisierul combinari.in sis a se tipareasca in fisier.out.

2. Se citesc două numere naturale nenule n și m. Să se determine toate şirurile cu m elemente din
mulţimea {1,2,..,n}, ordonate strict crescător, cu proprietatea că oricare două elemente
consecutive în şir au diferenţa mai mică sau egală cu cu 2.
#include <iostream>

using namespace std;

int st[100],n,p,x=0;

int valid(int k)

{int i;

for (i=1;i<k;i++)

if(st[k]==st[i] || (st[k]-st[k-1]>2)) return 0;

return 1;

void tipar()

x++; cout<<x<<".";

for(int i=1; i<=p; i++)

cout<<st[i]<<" ";
cout<<endl;

void back(int k)

for(int i=st[k-1]+1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);

int main()

cin>>n>>p;

back(1);

3. Folosind modelul combinărilor sa se generează numerele naturale cu câte trei cifre distincte
din mulţimea {2,5,6,8}.
#include <iostream>

using namespace std;

int st[100],n,p,x=0;

int valid(int k)

{int i;

for (i=1;i<=k-1;i++)
if(st[k]==st[i]) return 0;

return 1;

void tipar()

x++; cout<<x<<".";

for(int i=1; i<=p; i++)

if(st[i]==1) cout<<2;

else

if(st[i]==2) cout<<5;

else

if(st[i]==3) cout<<6;

else

if(st[i]==4) cout<<8;

// cout<<st[i]<<" ";

cout<<endl;

void back(int k)

for(int i=st[k-1]+1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);
}

int main()

//cin>>n>>p;

n=4;p=3;

back(1);

4.Folosind modelul combinarilor sa se genereze toate numerele de cate trei cifre.

#include <iostream>

using namespace std;

int st[100],n,p,x=0, a[]={0,1,2,3,4,5,6,7,8,9};

int valid(int k)

{int i;

for (i=1;i<=k-1;i++)

if(a[st[k]]==a[st[i]]) return 0;

return 1;

void tipar()

x++; cout<<x<<".";

for(int i=1; i<=p; i++)

cout<<a[st[i]];

cout<<endl;

void back(int k)
{

for(int i=st[k-1]+1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);

int main()

n=9;p=3;

back(1);

Modificati programul astfel incat sa nu fie doua cifre alaturate de aceeasi paritate.

5. Utilizând metoda backtracking, se generează toate posibilitățile de a forma succesiuni de câte


3 genuri muzicale distincte din mulțimea {jazz, rock, latino, house, pop}, din cele specificate.
Genurile musicale se citesc din fisierul combinari.in .
#include <iostream>

#include<fstream>

#include<cstring>

using namespace std;

ifstream f("combinari.in");

int st[100],n,p,x=0;

char a[5][10];

int valid(int k)

{int i;
for (i=1;i<=k-1;i++)

if(a[st[k]]==a[st[i]] || (st[k]%2==st[k-1]%2)) return 0;

return 1;

void tipar()

x++; cout<<x<<".";

for(int i=1; i<=p; i++)

cout<<a[st[i]]<<" ";

cout<<endl;

void back(int k)

for(int i=st[k-1]+1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);

int main()

f>>n>>p;

for(int i=1;i<=n;i++)

f>>a[i];
back(1);

Modificati programul astfel incat sa afiseze solutiile care incep cu jazz.

S-ar putea să vă placă și