Sunteți pe pagina 1din 3

1. Sa se genereze toate numerele de n cifre care contin k cifre de 1.

Exemplu : pentru n=3 si k=2 se vor afisa 101 112 113 114 115 etc.
#include<iostream>
using namespace std;
int st[100],i,p,n,k;
int valid(int p)
{
return 1;
}
int final(int p)
{
if(p==n) return 1;
else return 0;
}
void tiparire(int p)
{
int nr=0,i,x;
for(i=1;i<=p;i++)
if(st[i]==1) nr++;
if(nr==k)
{
for(i=1;i<=p;i++)
cout<<st[i]<<" ";
cout<<"\n";
}
}
void backtr()
{
p=1;
st[p]=0;
while(p>0)
if(st[p]<9)
{
st[p]=st[p]+1;
if(valid(p))
if(final(p)) tiparire(p);
else { p++; st[p]=0;}
}
else p--;
}
int main()
{
cin>>n>>k;
backtr();
return 0;
}
2. Sa se genereze toate numerele avand maxim k cifre ( cu cifre din
mutlimea {0,1,2,3....9} )
Exemplu : pentru k=3 se vor afisa numerele 0 1 2 ...... 9 10 11 12 ...... 99
100 101 ......999
#include<iostream>
using namespace std;
int st[100],i,p,n,k;
int valid(int p)
{

return 1;
}
int final(int p)
{
if(p==k) return 1;
else return 0;
}
void tiparire(int p)
{
for(int i=1;i<=p;i++)
cout<<st[i];
cout<<"\n";
}
void backtr()
{
p=1;
st[p]=0;
while(p>0)
if(st[p]<9)
{
st[p]=st[p]+1;
if(valid(p))
if(final(p)) tiparire(p);
else {p++; st[p]=-1; }
}
else p--;
}
int main()
{
cin>>n;
for(k=1;k<=n;k++) backtr();
return 0;
}
3. Sa se genereze toate sirurile de lungime n formate numai din
literele A si M , siruri care sa nu aiba 2 litere A alaturate.
Exemplu : pentru n=3
AMA
AMM
MAM
MMA
MMM

#include<iostream>
using namespace std;
int st[100],i,p,n; char v[50];
int valid(int p)
{
if(p>1&&st[p]==1&&st[p-1]==1)return 0;
return 1;
}
int final(int p)
{
if(p==n) return 1;
else return 0;
}

void tiparire(int p)
{
for(int i=1;i<=p;i++)
cout<<v[st[i]];
cout<<"\n";
}
void backtr()
{
p=1;
st[p]=0;
while(p>0)
if(st[p]<2)
{
st[p]=st[p]+1;
if(valid(p))
if(final(p)) tiparire(p);
else {p++; st[p]=0; }
}
else p--;
}
int main()
{
cin>>n;
v[1]='A'; v[2]='M';
backtr();
return 0;
}

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