online: 14; azi: 634; total: 51089 Manual clasa a xi a - Tehnici de programare - Metoda backtraking

Probleme Rezolvate



Manual clasa a Xi a

Tehnici de programare

Metoda backtraking

Pentru realizarea unui chestionar există n întrebări, fiecare întrebare având un punctaj. Numărul de întrebări şi punctajul fiecărei întrebări se citesc dintr-un fişier text. Să se genereze toate chestionarele care au între a şi b întrebări distincte şi un punctaj total între p şi q puncte. Valorile pentru a, b, p şi q se citesc de la tastatură.
Pentru a realiza acest program, vom utiliza o abordare de backtracking și vom citi datele dintr-un fișier text. În primul rând, să creeăm un fișier de intrare de exemplu:
Fișier de intrare (intrebari.txt):
5
2
3
5
7
10
Acest fișier indică următoarele informații:
# include < iostream >
# include < fstream >
using namespace std ;
int n, a, b, p, q;
int intrebari [ 100 ];
int sol[ 100 ];
void citire () {
ifstream fin ( "intrebari.txt" ) ;
fin >> n;
for ( int i = 0 ; i < n; ++i) {
fin >> intrebari [i];
}
fin. close ();
}
bool valid ( int k, int sum , int count ) {
return sum >= p && sum <= q && count >= a && count <= b;
}
void afisare ( int k) {
for ( int i = 0 ; i < k; ++i) {
cout << sol[i] << ' ' ;
}
cout << endl ;
}
void back ( int k, int start, int sum , int count ) {
if ( valid (k, sum , count )) {
afisare (k);
}
for ( int i = start; i < n; ++i) {
sol[k] = intrebari [i];
back (k + 1 , i + 1 , sum + intrebari [i], count + 1 );
}
}
int main () {
citire ();
cout << " Introduceti a, b, p si q: " ;
cin >> a >> b >> p >> q;
back ( 0 , 0 , 0 , 0 );
return 0 ;
}

Acest program va citi datele din fișierul text, va citi valorile pentru a, b, p și q de la tastatură și va afișa toate chestionarele posibile care respectă condițiile impuse.