Documente Academic
Documente Profesional
Documente Cultură
Sn, fiecare
saculet Si continand Nri monede de valoare Vi sa se afiseze toate modalitatil
de a plati o suma data S folosind numai monezi din saculeti.
SOLUTIE:
o Valid
PROGRAM C++:
#include <iostream>
using namespace std;
int Valid5(int k)
{ sum[k]=sum[k-1]+val[k]*x5[k];
if (sum[k]>S) return 0;
if (k==n5 && sum[k]!=S) return 0;
return 1;
}
void Afisare5()
{ int i,j;
cout<<sp5;
for(i=1;i<=n5;i++)
if (x5[i]!=0) cout<<x5[i]<<"*"<<val[i]<<" lei + ";
cout<<endl;
nrsol5++;
}
void Back5()
{ int k=1, cand;
x5[1]=-1;
while (k>0)
{ cand=0;
while (cand==0 && x5[k]<nr[k])
{ x5[k]++;
cand=Valid5(k);
}
if (cand==0) k--;
else if (k==n5) Afisare5();
else {k=k+1; x5[k]=-1;}
}
}
int main()
{ int i;
cout<<endl<<endl<<sp5<<"Plata unei sume de bani"<<endl;
cout<<endl<<sp5<<" Numarul tipuri monezi: "; cin>>n5;
cout<<sp5<<" Dati suma de plata: "; cin>>S;
cout<<endl;
for (i=1;i<=n5;i++)
{ cout<<sp5<<" Valoare moneda tip "<<i<<": "; cin>>val[i];
cout<<sp5<<" Numar monezi tip "<<i<<" : "; cin>>nr[i];
}
cout<<endl<<"Solutiile sunt: "<<endl;
Back5();
cout<<endl<<sp5<<"Numar solutii: "<<nrsol5;
return 0;
}