Documente Academic
Documente Profesional
Documente Cultură
int cc(int k)
{ for(int i=1;i<=k-1;i++)
if(x[i]==x[k] || abs(x[i]-x[k])==k-i) return 0;
return 1; }
void afisare()
{ nr++;
cout<<"Solutia "<<nr<<": "<<endl;
for(int i=1;i<=n;i++)
{ for(int j=1;j<=n;j++) if(x[i]==j) cout<<"R ";
else cout<<"* ";
cout<<endl; }
cout<<endl; }
void regine()
{ int k=1; x[k]=0;
while(k>0) { while(x[k]<n) { x[k]++;
if(cc(k)) if(k==n) afisare();
else x[++k]=0; }
k--; } }
void main()
{ clrscr();
cout<<"n="; cin>>n;
regine();
getch();
}
Varianta recursivã :
#include<iostream.h>
#include<conio.h>
#include<math.h>
int x[20],nr,n;
int cc(int k)
{ for(int i=1;i<=k-1;i++)
if(x[i]==x[k] || abs(x[i]-x[k])==k-i) return 0;
return 1; }
void afisare()
{ nr++;
cout<<"Solutia "<<nr<<": "<<endl;
for(int i=1;i<=n;i++)
{ for(int j=1;j<=n;j++) if(x[i]==j) cout<<"R ";
else cout<<"* ";
cout<<endl; }
cout<<endl; }
void regine(int k)
{ if(k>n) afisare();
else { x[k]=0;
while(x[k]<n) { x[k]++;
if(cc(k)) regine(k+1); } } }
void main()
{ clrscr(); cout<<"n="; cin>>n;
regine(1); getch(); }
Varianta iterativã :
#include<fstream.h>
#include<conio.h>
ofstream f("part_it.out");
int x[20],n;
int suma(int k)
{ int s=0;
for(int i=1;i<=k;i++) s+=x[i];
return s; }
void afisare(int k)
{ f<<n<<" = "<<x[1];
for(int i=2;i<=k;i++) f<<" + "<<x[i];
f<<endl; }
void partitii()
{ int k=1; x[k]=0;
while(k>0) { while(x[k]<n-suma(k-1))
{ x[k]++;
if(n==suma(k)) { if(k>1) afisare(k); }
else x[++k]=x[k-1]-1; }
k--; } }
void main()
{ clrscr();
cout<<"n="; cin>>n;
partitii();
f.close(); }
Varianta recursivã :
#include<fstream.h>
#include<conio.h>
ofstream f("part_it.out");
int x[20],n,val;
void init(int k)
{ if(k==1) x[k]=0;
else x[k]=x[k-1]-1; }
void afisare(int k)
{ f<<n<<" = "<<x[1];
for(int i=2;i<=k;i++) f<<" + "<<x[i];
f<<endl; }
void partitii(int k)
{ if(val==n) afisare(k-1);
else { init(k);
while(x[k]<n-val) { x[k]++;
val=val+x[k];
partitii(k+1);
val=val-x[k]; } } }
void main()
{ clrscr();
cout<<"n="; cin>>n;
partitii(1);
f.close(); }
Varianta iterativã :
#include<iostream.h>
int a[10],x[10],nr[10],i,n,s;
void afisare(int k)
{ int i;
for(i=1;i<=k;i++)
if(x[i]!=0) cout<<x[i]<<" * "<<a[i]<<" lei; ";
cout<<endl; }
int suma(int k)
{ int i,s=0;
for(i=1;i<=k;i++) s=s+x[i]*a[i];
return s; }
void main()
{ cout<<"Suma de platit "; cin>>s;
cout<<"Tipuri de monezi "; cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Valoarea si cantitatea disponibila: ";
cin>>a[i]>>nr[i]; }
i=1; x[i]=-1;
while(i>0)
{ while(x[i]<nr[i]) { x[i]=x[i]+1;
if(suma(i)==s) afisare(i);
else if(i<n) { i=i+1;
x[i]=-1; } }
i=i-1; }
}
Varianta recursivã :
#include<iostream.h>
int a[10],x[10],nr[10],i,n,s,suma;
void afisare()
{ int i;
for(i=1;i<=n;i++)
if(x[i]!=0) cout<<x[i]<<" * "<<a[i]<<" lei; ";
cout<<endl; }
void citire()
{ cout<<"Suma de platit "; cin>>s;
cout<<"Tipuri de monezi "; cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Valoarea si cantitatea disponibila: ";
cin>>a[i]>>nr[i]; } }
void plata(int i)
{ if(i>n) { if(suma==s) afisare(); }
else { x[i]=-1;
while(x[i]<nr[i]) { x[i]=x[i]+1;
if(suma+x[i]*a[i]<=s)
{ suma=suma+x[i]*a[i];
plata(i+1);
suma=suma-x[i]*a[i]; } } } }
void main()
{ citire(); plata(1); }