|
[c++] Program w c++
dawideo - 21-08-2007 21:38
Jestem dopiero raczkujący w programowaniu, a ten program znalazłem w necie; więc zwracam się z prośbą o wyjaśnienie mi tego kodu co on robi. Tzn wiem że służy do obliczania symbolu Newtona. Ale nie kumam jak on to robi. Bo na symbol Newtona jest wzór n!/(k!(n-k)!. a tutaj oni to jakoś inaczej obliczają np w pętli for czemu jest "n-k+1"??? Z góry dziękuje.
#include <iostream.h> #include <string.h> #define MAXNK 100 #define MAXWYNIK 1000000000
int main(){ int t,a,b; cin >> t; /* wczytaj liczbĂŞ testów */ while(t){ cin >> a; cin >> b; cout << newton(a,b) << endl; t--; } return 0; } int newton(int n, int k) { double w= 1; if (k>n/2) k=n-k; else k=k; for (int i=n; i>=n-k+1; i--) { w=w*i; } for (int i=1; i<=k; i++) { w=w/i; } if (w>MAXWYNIK) { w=-1; return w; } else return w; }
ponton - 21-08-2007 22:59
http://pl.wikipedia.org/wiki/Symbol_...i_algebraiczne
slawek1979 - 21-08-2007 23:02
Nasuwa mi się tylko jedno na początek. Nieodzowna raczej w programowaniu jest znajomość matematyki. Ale do rzeczy:
1. Obliczenie 3 razy silni to bardzo "dużo" (poczytaj nt. złożoności algorytmów), a więc lepiej trochę pokombinować. 2.n!=1*2*3*...*n, a (n-k)!=1*2*3*...*(n-k) no więc jak po skracasz górę i dół to dojdziesz do tego dlaczego jest tak a nie inaczej (+/-).
Pozdrawiam, Sławek.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|