Probleme Info
Probleme Info
#include<iostream.h>
#include<conio.h>
#include<math.h>
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
Aranjamente
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
cout<<"p=";cin>>p;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
else
{
init(k);
else
k--;
}
int main()
{citire();
bkt();
getche();
}
Combinari
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
cout<<"p=";cin>>p;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{ if(k>1)
if(x[k]<=x[k-1])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
tiparire(k);
{citire();
bkt();
return 0;
}
}
k=k+1;
tiparire(k);
else
{
k=k+1;
init(k);
}
else
k--;
}
int main()
init(k);
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
if(cont(k))
if(solutie(k,p))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
for(j=1;j<=n;j++)
{
p=j;
bkt(p);
}
getche();
}
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k]<x[k-1])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+2;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
#include<iostream>
#include<conio.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<2*n)
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
#include<iostream>
#include<conio.h>
using namespace std;
int n,x[100],k,p,v[100];
void citire()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
{if(x[k]<8)
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k-1]>=x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+2;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
5.Se citesc elementele unui sir e numere intregi.Sa se rearanjeze sirul astfel
incat sa nu fie doua numere negative/pozitive/impare/pare alaturate.
{x[k]=x[k]+1;
if(x[k]==x[i])
if(cont(k))
ok=0;
nr pozitive;
if((k>1)&&(v[x[k]]<0)&&(
#include<iostream>
if(solutie(k))
v[x[k-1]]<0))
#include<conio.h>
ok=0;
#include<string.h>
{j=j+1;
return ok;
using namespace std;
}
int
tiparire(k);}
int solutie(int k)
j=0,n,x[100],k,p,v[100];
{if(k==n)
void citire()
else
return 1;
{int i;
{
return 0;
cin>>n;
}
for(i=1;i<=n;i++)
k=k+1;
void tiparire(int k)
cin>>v[i];
{int i;
}
init(k);
for(i=1;i<=k;i++)
void init(int k)
}
cout<<v[x[i]]<<" ";
{x[k]=0;
}
cout<<endl;
}
else
}
int exista(int k)
k--;
void bkt()
{if(x[k]<n)
{
return 1;
}
k=1;
return 0;
int main()
init(k);
}
{citire();
while(k>0)
int cont(int k)
bkt();
if(exista (k))
{int i,ok=1;
cout<<j;
for(i=1;i<k;i++)
return 0;
{x[k]=x[k]+1;
if(x[k]==x[i])
}
if(cont(k))
ok=0;
if((k>1)&&(v[x[k]]>0)&&(
nr negative;
if(solutie(k))
v[x[k-1]]>0))
#include<iostream>
ok=0;
#include<conio.h>
{j=j+1;
return ok;
#include<string.h>
}
using namespace std;
tiparire(k);}
int solutie(int k)
int
{if(k==n)
else
j=0,n,x[100],k,p,v[100];
return 1;
{
void citire()
return 0;
{int i;
}
k=k+1;
cin>>n;
void tiparire(int k)
for(i=1;i<=n;i++)
{int i;
init(k);
cin>>v[i];
for(i=1;i<=k;i++)
}
}
cout<<v[x[i]]<<" ";
}
void init(int k)
cout<<endl;
else
{x[k]=0;
}
k--;
}
void bkt()
int exista(int k)
{
}
{if(x[k]<n)
k=1;
int main()
return 1;
init(k);
{citire();
return 0;
while(k>0)
bkt();
}
if(exista (k))
cout<<j;
int cont(int k)
return 0;
{int i,ok=1;
}
for(i=1;i<k;i++)
nr impare;
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
j=0,n,x[100],k,p,v[100];
void citire()
{int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i,ok=1;
for(i=1;i<k;i++)
if(x[k]==x[i])
ok=0;
if((k>1)&&(v[x[k]]%2!
=0)&&(v[x[k-1]]%2!=0))
ok=0;
return ok;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
6.Se citeste un cuvant
de maxim 10 litere.Sa se
{j=j+1;
tiparire(k);}
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
cout<<j;
return 0;
}
if((k>1)&&(v[x[k]]
%2==0)&&(v[x[k-1]]
%2==0))
ok=0;
return ok;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
nr pare;
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
j=0,n,x[100],k,p,v[100];
void citire()
{int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i,ok=1;
for(i=1;i<k;i++)
if(x[k]==x[i])
ok=0;
afiseze toate
posibilitati;e de a obtine
if(cont(k))
if(solutie(k))
{j=j+1;
tiparire(k);}
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
cout<<j;
return 0;
}
cuvintele cu literele
cuvantului dat.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int j,n,x[100],k,p;
char s[10];
void citire()
{
cin>>s;
n=strlen(s);
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{if(k>1)
if(x[k]<x[k-1])
return 0;
return 1;
}
int solutie(int k,int p)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<s[x[i]-1]<<" ";
cout<<endl;
}
void bkt(int p)
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k,p))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
for(j=1;j<=n;j++)
{
p=j;
bkt(p);
}
getche();
}
7.Pentru un nr n citit
de la tastatura scrieti
un program care sa
afiseze toate
secventele de n litere
din
multimea{a,r,g,v}.Nu
se plaseaza doua
litere identice
consecutive si se
utilizeaza n/2 litere
din n.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<string.h>
int n,x[100],i,k,p;
char cuv[10];
void citire()
{cuv='ARGV';
n=4;}
void init(int k)
{x[k]=0;}
int exista(int k)
{if (x[k]<n)
return 1;
return 0;}
int cont(int k)
{if(k==1)
return 1;
if(x[k]==x[k-1])
return 0;
return 1;
}
int solutie (int k)
{p=0;
if(k==n)
{for(i=1;i<=k;i++)
if(strcmp(x[i]-1,'R')==0)
p++;
if(p==2)
return 1;}
return 0;}
void tiparire(int k)
{for(i=1;i<=k;i++)
cout<<cuv[x[i]-1]<<" ";
cout<<endl;}
void bkt()
{k=1;
init(k);
while(k>0)
if (exista(k))
{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else
{k++;
init(k);}}
else
k--;}
int main()
{citire();
bkt();
getche(
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==p)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]
+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
k=k+1;
9.Problema turnurilor: Se dau n cuburi numerotate de la 1 la n de laturi li si ci (i de
la 1 la n),fiecare culoare fiind codificata cu un caracter.Sa se tipareasca toate
turnurile care se pot forma luand k cuburi din cele n disponibile astfel incat laturile
cuburilor din turn sa fie in ordine crescatoare,iar culorile a oricaror doua cuburi din
turn sa fie diferite.Sa se afiseze turnul de inaltime maxima (care are suma
inaltimilor maxima).
#include<iostream.
int exista(int k)
cout<<v[x[i]].l<<v[
{x[k]=x[k]+1;
h>
{if (x[k]<n)
x[i]].p<<" ";
if (cont(k))
#include<conio.h>
return 1;
cout<<endl;}
if(cuburi(k))
#include<math.h>
return 0;}
int cuburi(int k)
if(solutie(k))
#include<string.h>
int cont(int k)
{if(k>1)
tiparire(k);
typedef struct()
{for(i=1;i<=k;i++)
if(v[x[kelse
{int l;
if(x[i]==x[k])
1]].l>v[x[k]].l ||
{k++;
char c[1];}v[100];
return 0;
strcmp(v[x[kinit(k);}}
int n,h,p,x[100],i,k;
return 1;
1]].c,v[x[k]].c)==0)
else
void citire()
}
return 0;
k--;}
{cin>>p;cin>>n;
int solutie (int k)
return 1;}
int main()
for(i=1;i<=v;i++)
{if(k==p)
void bkt()
{citire();
cin>>v[i].l>>v[i].c;
return 1;
{k=1;
bkt();
}
return 0;}
init(k);
void init(int k)
void tiparire(int k)
while(k>0)
{x[k]=0;}
{for(i=1;i<=k;i++)
if (exista(k))
10.Se citeste un nr x.Sa se afiseze toate numerele care se pot forma cu cifrele
lui x.
a)cu toate cifrele;
#include<iostream>
#include<conio.h>
using namespace std;
int
n=0,x[100],k,nr,v[100];
void citire()
{
cin>>nr;
while(nr!=0)
{
n=n+1;
v[n]=nr%10;
nr=nr/10;
}
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]];
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;}
b)cu o parte.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int
v[100],n=0,x[100],k,nr;
char s[10];
void citire()
{
cin>>nr;
while(nr!=0)
{
n=n+1;
v[n]=nr%10;
nr=nr/10;
}
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int solutie(int k)
{if(k<=n)
return 1;
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(solutie(k))
{tiparire(k);
k=k+1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=k;i++)
cout<<v[x[i]]<<" ";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{long s=0;
for(i=1;i<=k;i++)
s=s*10+x[i];
if(s%4==0)
cout<<s;
cout<<endl;
}
void bkt()
{
k=1;x[k]=1;
init(k);
while(k>=1)
if(exista (k))
{x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{
citire();
bkt();
getche();
return 1;
return 0;}
int solutie(int k)
{if (k==4)
return 1;
return 0;}
void tiparire(int k)
{for (i=1;i<=k;i++)
cout<<x[i]<<" ";
}
void bkt()
{k=1;
init(k);
while(k>0)
if(exista(k))
{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else
{k++;
init(k);}}
else
k--;}
int main()
{
bkt();
return 0;
}
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=n;i++)
cout<<v[i][x[i]]<<"
";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
getche();
}
if(solutie(k))
#include<iostream.h
>
#include<conio.h>
#include<math.h>
#include<string.h>
using namespace std;
int
n,x[100],k,p,i,j,a[100]
,v[100][100];
void citire()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
for(j=1;j<=a[i];j++)
cin>>v[i][j];
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<a[k])
return 1;
return 0;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i;
for(i=1;i<=n;i++)
cout<<v[i][x[i]]<<"
";
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
{x[k]=x[k]+1;
if(solutie(k))
tiparire(k);
else
}
int main()
}
{citire();
k=k+1;
else
bkt();
k--;
getche();
init(k);
}
16.Problema Reginelor: Sa se genereze toate modalitatile de
asezare a n regine pe o tabla de n x n,astfel incat reginele sa nu se
atace(2 regine se ataca daca sunt pe aceeasi
linie,diagonala,coloana).
{
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int n,x[100],k,p;
void citire()
{cout<<"n=";
cin>>n;
}
void init(int k)
{x[k]=0;
}
int exista(int k)
{if(x[k]<n)
return 1;
return 0;
}
int cont(int k)
{int i;
for(i=1;i<k;i++)
if(x[i]==x[k])
return 0;
for(i=1;i<=k;i++)
if((abs(ik)==abs(x[i]-x[k])))
return 0;
return 1;
}
int solutie(int k)
{if(k==n)
return 1;
return 0;
}
void tiparire(int k)
{int i,j;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(x[i]==j)
cout<<"D";
else
cout<<"*";
cout<<endl;
}
cout<<endl;
}
void bkt()
{
k=1;
init(k);
while(k>0)
if(exista (k))
if(cont(k))
if(solutie(k))
tiparire(k);
else
{
k=k+1;
init(k);
}
}
else
k--;
}
int main()
{citire();
bkt();
return 0;
}
{x[k]=x[k]+1;
17.Problema turelor: Sa se afiseze toate ,modalitatile de a aseza n
ture astfel incat turele sa nu se atace.Doua ture se ataca reciproc
daca sunt situate pe aceeasi linie sau coloana.
#include<iostr
int
int exista(int
{for(i=1;i<=k;
eam.h>
n,x[100],i,k,p;
k)
i++)
#include<coni
void citire()
{if (x[k]<n)
if(x[k]==x[i])
o.h>
{cin>>n;}
return 1;
return 0;
#include<mat
void init(int k)
return 0;}
return 1;
h.h>
{x[k]=0;}
int cont(int k)
}
{for(j=1;j<=n;
j++)
if(x[i]==j)
cout<<"T";
else
cout<<"*";
cout<<endl;}
cout<<endl;}
void bkt()
{k=1;
init(k);
while(k>0)
if (exista(k))
{x[k]=x[k]+1;
if (cont(k))
if(solutie(k))
tiparire(k);
else
{k++;
init(k);}}
else
k--;}
int main()
{citire();
bkt();
getche();}
{if(k<=n)
return 1;
return 0;}
void tiparire(int k)
{s[2]=c;
for(i=1;i<=k;i++)
cout<<s[x[i]-1];
cout<<endl;
}
void bkt()
{ k=1;
init(k);
while(k>0)
{
if(exista(k))
{
x[k]=x[k]+1;
if(cont(k))
if(solutie(k))
tiparire(k);
else
{k=k+1;
init(k);}
}}}
int main()
{citire();
bkt();
getche();