You are on page 1of 7

I.

Produs cartezian
#include <iostream>
using namespace std;
int st[100],n,x=0;
void tipar()
{
x++; cout<<x<<".";
for(int i=1; i<=n; i++)
cout<<st[i]<<" ";
cout<<endl;
}
void back(int k)
{
for(int i=1; i<=n; i++)
{
st[k]=i;
if(k==n) tipar();
else back(k+1);
}
}
int main()
{
cin>>n;
back(1);
}

1. Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru


litere din mulţimea A={a,b,c,d,e}.
#include <iostream>
using namespace std;
int st[100],n,x=0;
char s[]="abcd";
void tipar()
{
x++; cout<<x<<".";
for(int i=0; i<n; i++)
cout<<s[st[i]]<<" ";
cout<<endl;
}
void back(int k)
{
for(int i=0; i<n; i++)
{
st[k]=i;
if(k==n-1) tipar();
else back(k+1);
}
}
int main()
{
cin>>n;
back(0);
}

Modificati programul astfel incat sa nu contina doua vocale consecutive.

(se adauga functia de validare)


int valid(int k)
{ for (int i=0;i<k;i++)
if(strchr("aeiou",s[st[k-1]]) && strchr("aeiou",s[st[k]])) return 0;
return 1;
}

II.Aranjamente

#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=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);

2. Se citesc doua numere naturale n si p (n,p<=10) . Afisati toate submultimile cu m elemente ele
multimii A = {1,2,3….,n} in care nu exista doua elemente pare alaturate.

#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]%2==0 && st[k-1]%2==0)) 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=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. Se citesc doua numere naturale n si m (n,m<=10) si apoi o multime A cu n elemente naturale ordonate
crescator. Afisati toate submultimile cu m elemente ele multimii A in care nu exista doua elemente pare
alaturate. Exemple: n=5, m=3 si A={1,4,6,7,9} => {1, 4, 7} {1,4,9}, {1,6,7}, {1,6,9}...

#include <iostream>
using namespace std;

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

int valid(int k)

{int i;

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

if(st[k]==st[i] || (a[st[k]]%2==0 && a[st[k-1]]%2==0)) 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=1; i<=n; i++)

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);

int main()

cin>>n>>p;
for(int i=1;i<=n;i++)

cin>>a[i];

back(1);

4.STEAG

Se dau urmatoarele 6 culori: alb, galben, rosu, verde, albastru si negru. Construiti toate steagurile
formate din 3 culori.

#include <iostream>

using namespace std;

char a[6][10];

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<<a[st[i]]<<" ";

cout<<endl;

void back(int k)

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

st[k]=i;

if(valid(k))

if(k==p) tipar();

else back(k+1);

int main()

cin>>n>>p;

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

{cin.get();

cin.get(a[i],9);

back(1);

a)Modificati programul astfel incat sa contina culoarea verde pe pozitia 2.

b) Modificati programul astfel incat sa afiseze solutiile care incep cu “alb”.

You might also like