📘 Lecție de C++ pentru clasa a 11-a, BAC și olimpiadă, cu explicații video de la profesor. Mai jos ai rezumatul. În lecția completă găsești aplicații rezolvate cu simulator, în care vezi pas cu pas cum se schimbă variabilele, compilator C++ în browser, exerciții propuse cu indicii și rezolvare, și pe Alex, asistentul care îți dă indicii, îți explică algoritmul și îți corectează codul.
🎯 Apare la BAC? Indirect. Generarea permutărilor și combinărilor apare la BAC la itemii de backtracking, iar lecția asta îți construiește baza pentru ei.
void perm(int k) {
if (k == n + 1) { afiseaza(); return; }
for (int i = 1; i <= n; i++)
if (!folosit[i]) {
sol[k] = i;
folosit[i] = 1;
perm(k + 1);
folosit[i] = 0;
}
}
1. Câte permutări are o mulțime cu n elemente? n! permutări, deci numărul lor crește foarte repede.
2. Ce rol are vectorul folosit[]? Marchează valorile deja puse în soluția curentă, ca să nu se repete.
3. De ce se pune folosit[i] = 0 după apelul recursiv? Ca valoarea i să poată fi folosită din nou în alte variante ale soluției.
4. Care e diferența față de backtracking? Backtracking adaugă condiții de validare care opresc devreme variantele care nu pot da soluție.
5. Se pot genera permutări fără recursivitate? Da, de exemplu cu next_permutation, dar varianta recursivă e mai ușor de înțeles.