Hej!
Zadanie dotyczy obliczania ile jest możliwości wyznaczenia ze zbioru n elementowego zbioru k elementowego. (dwuman Newtona)
Próbowałam rozwiązywać to na kilka sposobów, ale niestety na spoju nie zalicza.
Pierwszym pomysłem było pisanie silni ale niestety zbyt duże wartości przekraczające long long int ;(
Drugim było wyznaczenie odpowiedniej wartości z tzw trójkąta Pascala - długo zajmowało liczenie
Trzecim sposobem bylo wyznaczenie odpowiedniego iloczynu i na bieżąco skracanie ułamków..
Niestety wyskakuje błędna odpowiedz a ja juz nie wiem co zrobiłam tam żle..podejrzewam jednak, że gdzieś pojawia się przepełnienie i dlatego ;(
tu link do zadania https://pl.spoj.com/problems/BINOMS/
tu mój kod (trzeci pomysł):
#include <iostream>
//#include <iomanip>
using namespace std;
int main()
{
int n;
int k;
cin>>n>>k;
if(k>n/2)
k=n-k;
//cout<<k<<endl;
long long int iloczyn=1;
int doIlu=n-k+1;
long long int wynik;
if(k==1) cout<<n<<endl;
else if(k==0) cout<<1<<endl;
else
{
for(int i=n;i>=doIlu;i--)
{
//cout << setprecision(1000);
iloczyn=iloczyn*i;
//cout<<iloczyn<<endl;
}
//cout<<"iloczyn "<<iloczyn<<endl;
//cout<<"DO ilu "<<doIlu<<endl;
for(int j=2;j<k+1;j++)
{
wynik=iloczyn/j;
iloczyn=wynik;
}
cout<<wynik<<endl;
}
return 0;
}
Będę wdzięczna jeśli ktoś mnie nakieruje <3