Hogy lehet c-ben a binomiális együttható értékét kiszámítani?
Beírok két számot, hogy pl 8 aztán 6, és adja meg a (8 alatt a 6) értékét. Én eddig vagyok meg vele:
#include <stdio.h>
int main()
{
int szamlalo[40]={1};
int nevezo[40]={1};
long long unsigned a;
int n, k, i, s, z, q, l;
scanf("%d", &n);
scanf("%d", &k);
if(k>n-k)
{k=n-k;}
s=n;
i=0;
while(s>n-k)
{szamlalo[i]=s;
s=s-1;
i=i+1;}
z=k;
l=0;
while(z>1)
{nevezo[l]=z;
z=z-1;
l=l+1;}
for(i=0; i<40; i=i+1)
{for(q=0; q<40; q=q+1)
{if(szamlalo[i]%nevezo[q]==0)
{szamlalo[i]=szamlalo[i]/nevezo[q];}}}
a=1;
for(i=0; i<40; i=i+1)
{a=a*szamlalo[i];}
printf("%llu", a);
return 0;
}
És floating point exception ír ki.
Mi ez a rengeteg változó? :)
Írj egy pár soros függvény, ami kiszámítja a faktoriálist!
Utána: fact(n) / (fact(k) * fact(n - k))
Kész.
Hátha a következő link segít:
A faktoriális kiszámítása rekurzív módon:
int factorial(int n) {
return n == 0 ? 1 : n * factorial(n - 1);
}
én faktoriálsos megközelítést nem erőltetném, mert egy pillanat alatt csitrilliárdos léptékű számaid lesznek...
lusta vagyok végigbogarászni a színezetlen tördeletlen kódot, de így első pillantásra úgy látom, hogy valami szorzatképletet használsz, kissé bő lére eresztve...
van rá egy egyszerű produktum képlet 1-től k-ig összeszorzod, hogy (n-k+1)/1, és megkapod n alatt a k-t.
egysoros program, és nem emlékszem, hogy mikor használtam for ciklus indexébe lebegőpontost, de íme:
#include <stdio.h>
int main()
{
int n = 8;
int k = 3;
double res = 1;
for (double i=1; i<=k; i++) res*=(n-k+i)/i;
printf("%f", res);
return 0;
}
elkapkodtam, *szóval: összeszorzod i=1 től káig, hogy (n-k+i)/i, na.
a kódba legalább jól írtam, asztat nézd
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!