Se dau mărgele de 5 culori: alb, roşu, verde, albastru, negru. Numărul mărgelelor de fiecare
culoare se consideră nelimitat. Scrieți un program C++ care să afişeze toate colierele de n <15
mărgele care se pot forma, respectând următoarele condiţii:
- numărul mărgelelor roşii nu poate depăşi o treime din numărul total de mărgele din colier
Rezolvare :
#include <iostream>
#include <fstream>
#include <cstring>
int n,x[50],nrsol;
char a[20][20];
ofstream g("colier.txt");
void tipar(int k)
g<<a[x[i]]<<" ";
g<<endl;
}
int numaratoare(int k)
int nr=0;
if (x[k]==2)
nr++;
return nr;
if (k>1)
return 0;
if (x[k]==x[k-1])
return 0;
if (numaratoare(x[k])>n/3)
return 0;
return 1;
void backtr(int k)
x[k]=i;
if (cont (k)==1)
if (k==n)
nrsol++;
tipar(k);
else
backtr(k+1);
int main()
cout<<"n=";
cin>>n;
nrsol=0;
strcpy(a[1],"alb");
strcpy(a[2],"rosu");
strcpy(a[3],"verde");
strcpy(a[4],"albastru");
strcpy(a[5],"negru");
backtr(1);
g<<nrsol;
return 0;
Fisierul pentru :
a)n=3
alb rosu alb
R : 66
b)n=5
[…]
876
c)n=9
R :154704 de modalitati