Calculul combinărilor de n luate câte k (nCk) în C++
Această problemă poate apărea sub mai multor forme:
- Dându-se două numere naturale și , să se afle numărul combinărilor de luate câte : .
- Într-o clasă sunt elevi, dintre care doar pot fi selectați în echipa clasei de fotbal. Câte modalități de alegere a echipei sunt, știind că ordinea elevilor nu contează?
- Să se afle coeficientul celui de-al -lea termen din binomul .
Formula numărului de combinări
Numărul de combinări este egal cu .
Exemplu
Pentru și , avem .
Se consideră că pentru , .
Calcularea combinărilor (metodă normală)
O metodă obișnuită calculează factorialele celor trei numere dorite — n
, k
și n - k
, după care se afișează formula menționată mai devreme.
Implementare C++
Avem următoarea implementare în C++:
#include <iostream>
using namespace std;
int main()
{
//Citim și declarăm variabilele n și k
int n, k;
cin >> n >> k;
//Determinăm factorialele dorite
int factn = 1, factk = 1, factnk = 1; //n!, k! și (n - k)!
for(int i = 1; i <= factn; i++)
factn = factn * i;
for(int i = 1; i <= factk; i++)
factk = factk * i;
for(int i = 1; i <= factnk; i++)
factnk = factnk * i;
//Calculăm și afișăm numărul de combinări
int nCk = factn / (factk * factnk);
cout << nCk;
return 0;
}
Calcularea combinărilor mai mari
Factorialele cresc foarte repede — 13!
nici măcar nu intră în tipul de date
int
. Desigur, putem să extindem limita folosind tipul de date long long
,
însă o să întâlnim destul de rapid o limită.
Unele probleme cer răspunsul combinărilor modulo un anumit număr prim. Prin
această operație, putem să folosim tipul de date int
și totodată să calculăm
factoriale imense.
Cu toate acestea, dacă vrem să aflăm cu exactitate numărul, putem să ne folosim de numere mari, prin care în loc să folosim un tip de date pentru a păstra un număr, vom folosi un vector, fiecare element al vectorului conținând câte o cifră.
Soluția cu numere mari este brutală — operațiile sunt extrem de dificil de implementat. Însă, din fericire, acest articol despre Numere Mari explică și exemplifică foarte ușor operațiile cu aceste numere mari.
Bibliografie sau alte resurse
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0