Cerința
Această problemă ar putea avea oricare dintre următoarele cerințe:
- într-o clasă sunt
n
elevi. În câte moduri putem face o echipă dink
elevi? - în parcul auto al unei firme de taxi sunt
n
mașini. Într-o zi vin la lucruk
șoferi. În câte moduri pot fi alese celek
mașini folosite? - la o masă sunt
n
locuri. La masă vor stak
persoane. În câte moduri putem alege scaunele folosite? - avem
n
bomboane diferite. În câte moduri putem alegek
bomboane? - o mulțime are
n
elemente. Câte submulțimi cuk
elemente are? - etc.
Din lipsă de imaginație, cerința este:
Se dau numerele naturale n
și k
. Calculați \( C_n^k \).
Date de intrare
Programul citește de la tastatură numerele naturale n k
.
Date de ieșire
Programul va afișa pe ecran numărul C
, reprezentând \( C_n^k \).
Restricții și precizări
0 ≤ k ≤ n ≤ 500
Exemplu
Intrare
4 2
Ieșire
6
Explicație
Dacă o mulțime are 4
elemente, fie aceasta A={a,b,c,d}
, atunci submulțimile cu câte 2
elemente sunt {a,b}
, {a,c}
, {a,d}
, {b,c}
, {b,d}
, {c,d}
, adică 6
submulțimi.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema CalculCombinari:
#include <iostream>
#include <cmath>
using namespace std;
typedef int NrMare[1001];
NrMare x[501], y[501], * A, * B;
void Atrib(NrMare A, int n)
{
A[0] = 0;
do
{
A[++A[0]] = n % 10;
n /= 10;
}
while(n);
}
void Suma(NrMare A, NrMare B, NrMare S)
{
int t = 0;
S[0] = 0;
for(int i =1 ; i <= max(A[0] , B[0]) ; i++)
{
int x = t + A[i] + B[i];
S[++S[0]] = x % 10;
t = x / 10;
}
while(t)
S[++S[0]] = t % 10, t /= 10;
}
void Afis(NrMare A)
{
for(int i = A[0] ; i > 0 ; i --)
cout << A[i];
}
int main()
{
A = x, B = y;
int n, k;
cin >> n >> k;
Atrib(A[0], 0);
for(int i = 1 ; i <= n ; i ++)
{
Atrib(B[0], 1);
Atrib(B[i], 1);
for(int j = 1; j < i ; j ++)
Suma(A[j-1], A[j] , B[j]);
swap(A,B);
}
Afis(A[k]);
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #3330 CalculCombinari
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3330 CalculCombinari de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!