Program w c++

Potrzebujesz pomocy z C, C++, perl, python, itp.
dawideo
Beginner
Posty: 154
Rejestracja: 25 czerwca 2007, 11:46
Lokalizacja: Zbychowo

Program w c++

Post autor: dawideo »

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.

Kod: Zaznacz cały

#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
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

slawek1979
Posty: 24
Rejestracja: 16 lipca 2007, 22:32
Lokalizacja: Kraków

Post autor: slawek1979 »

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.
ODPOWIEDZ