Chcę napisać program, który poda mi na ile sposobów może paść wynik meczu. Założenie jest takie, że gospodarze pierwsi obejmują prowadzenie i utrzymują je przez cały mecz. Podaje np. wynik 4:1 wtedy jedną z możliwości jest po prostu 1:0, 2:0, 3:0, 4:0, 4:1, 4:2 ale jak wyznaczyć wszystkie możliwości? Zrobiłem to jakoś ale mój sposób nie działa za dobrze więc jeśli ktoś ma jakiś pomysł albo widział gdzieś podobny algorytm to proszę o pomoc.
16
padło 5 goli. każdy gol mogła strzelić drużyna a lub drużyna b. więc jest to kombinacja z powtórzeniami. wynik : 2^5 = 32. ale odrzucamy możliwość, że pierwszy gol strzeliła drużyna B, więc wynik dzielimy przez 2.
rafal__ napisał(a)
16
padło 5 goli. każdy gol mogła strzelić drużyna a lub drużyna b. więc jest to kombinacja z powtórzeniami. wynik : 2^5 = 32. ale odrzucamy możliwość, że pierwszy gol strzeliła drużyna B, więc wynik dzielimy przez 2.
ups. pomyłka :D
to by działało, gdybyśmy nie mieli ustalonego wyniku.
poprawny wynikiem będzie 4!/(3!*1!) = 4 (permutacja z powtórzeniami). dawno matmy nie miałem, a kombinatoryka zawsze mi się myliła
1:0;2:0;3:0;4:0;4:1
1:0;2:0;3:0;3:1;4:1
1:0;2:0;2:1;3:1;4:1
1:0;1:1;2:1;3:1;4:1
Ale to nie jest wzór działający dla wszystkich możliwości bo jak by było np 2:1 to jaki on będzie 2!/(1!-1!)? jak on się przedstawia na zmiennych? Załóżmy, że mamy wynik a:b to twój wzór wygląda a!((a-1)!*b!)?
A i nie tylko odrzucamy możliwość, że pierwszego gola strzeliła drożyna B ale drugiego też bo jak nie to możne paść choc przez chwile remis a drożyna A ma prowadzić cały mecz...
Giks napisał(a)
Ale to nie jest wzór działający dla wszystkich możliwości bo jak by było np 2:1 to jaki on będzie 2!/(1!-1!)? jak on się przedstawia na zmiennych? Załóżmy, że mamy wynik a:b to twój wzór wygląda a!((a-1)!*b!)?
A i nie tylko odrzucamy możliwość, że pierwszego gola strzeliła drożyna B ale drugiego też bo jak nie to możne paść choc przez chwile remis a drożyna A ma prowadzić cały mecz...
nie 2!/(1!-1!), ale 2!/(1!*1!) czyli 2:
0:0;1:0;2:0;2:1
0:0;1:0;1:1;2:1
a tego, że odrzucamy możliwość remisu, nie doczytałem... czyli mój wzór nie działa
No niestety nie działa nie wiem czy to się da zapisać poprzez wzór czy chyba jednak trzeba algorytmem...
Mój algorytm działa tak, że jest pętla wykonująca się aż osiągniemy pożądany wynik. W pętli są warunki które odpowiednio sterują przyznawaniem goli i tak:
Najpierw dają gola drużynie A jest 1:0 pętla przelatuje sprawdza czy tego wyniku szukałem jeśli nie wykonuje się jeszcze raz(szukam wyniku 4:1). Daje więc kolejnego gola drużynie A jest 2:0. Pętla wykonuje się jeszcze raz mam teraz dwie możliwości albo dodać gola drużynie A albo drużynie B zwiększam więc k (oznaczające ilość możliwości i na początku wynoszące 1) do 2 i rekurencyjnie wywołuje tą samą procedurę dla wyniku 2:1 problem w tym, że program powykonuje te wszystkie rekurencje ale nie podkańcza pętle tzn. Gdy wywołałem rekurencje na wyniku 2:0 to potem powinna pętla się dokończyć polecieć 3:0 itd. A tak się nie dzieje nie wiem jak to rozwiązać.
Mam wrażenie, że tak:
int policz(int a,int b)
{
if(a<=b)
return 0;
if(b==0)
return 1;
if(a<=2)
return 1;
return policz(a-1,b)+policz(a,b-1);
}
To chyba na prawdę działa dzięki wielkie.