online: 11; azi: 910; total: 51365 Manual clasa a xi a - Tehnici de programare - Metoda backtraking

Probleme Rezolvate



Manual clasa a Xi a

Tehnici de programare

Metoda backtraking

Să se genereze toate aranjamentele, de m numere, ale unei mulţimi de n numere oarecare astfel încât suma elementelor generate să fie egală cu s. Numărul de elemente ale mulţimii , n, elementele mulţimii , valoarile pentru m şi pentru suma s, se citesc de la tastatură.
# include < iostream >
using namespace std ;
int n, m, s;
int numere[ 100 ];
int aranjament[ 100 ];
void tipar () {
for ( int i = 0 ; i < m; i++) {
cout << aranjament[i] << ' ' ;
}
cout << endl ;
}
int suma () {
int sum = 0 ;
for ( int i = 0 ; i < m; i++) {
sum += aranjament[i];
}
return sum ;
}
void bt ( int k, int start) {
if (k == m) {
if ( suma () == s) {
tipar ();
}
return ;
}
for ( int i = start; i < n; i++) {
aranjament[k] = numere[i];
bt (k + 1 , i + 1 );
}
}
int main () {
cout << " Introduceti numarul de elemente ale multimii (n): " ;
cin >> n;
cout << " Introduceti elementele multimii : " ;
for ( int i = 0 ; i < n; i++) {
cin >> numere[i];
}
cout << " Introduceti numarul de elemente ale aranjamentului (m): " ;
cin >> m;
cout << " Introduceti suma dorita (s): " ;
cin >> s;
bt ( 0 , 0 );
return 0 ;
}