[Lekcja 30] Problem z lotkiem
Ostatnio zmodyfikowano 2012-11-29 20:46
mzmzmz Temat założony przez niniejszego użytkownika |
[Lekcja 30] Problem z lotkiem » 2012-11-27 21:33:03 Witam! Chciałbym prosić o pomoc w rozwiązaniu problemu z ostatnim zadaniem z lekcji 30 czyli z losowaniem 6 liczb ze zbioru <1,49>. Mianowicie nie wiem jak zrobić, żeby przy pomocy samych zagnieżdżonych pętli odrzucić z wyniku sekwencje tych samych liczb(żeby wszystkie permutacje zbiorów np.[1,2,3,4,5,6] zostały policzone jako jedna). Przy pomocy rachunku prawdopodobieństwa to jest proste. Tych permutacji jest 6! i wystarczy wynik podzielić, ale jak bez tego to zrobić... Oto mój kod: #include <iostream>
using namespace std;
int main() { long long lp = 0; for( int z1 = 1; z1 <= 49; z1++ ) { for( int z2 = 1; z2 <= 49; z2++ ) { if( z2 == z1 ) continue; for( int z3 = 1; z3 <= 49; z3++ ) { if( z3 == z1 || z3 == z2 ) continue; for( int z4 = 1; z4 <= 49; z4++ ) { if( z4 == z1 || z4 == z2 || z4 == z3 ) continue; for( int z5 = 1; z5 <= 49; z5++ ) { if( z5 == z1 || z5 == z2 || z5 == z3 || z5 == z4 ) continue; for( int z6 = 1; z6 <= 49; z6++ ) { if( z6 == z1 || z6 == z2 || z6 == z3 || z6 == z4 || z6 == z5 ) continue; lp++; } } } } } } cout << "Liczba mozliwych kombinacji wyniosla " << lp << endl; system( "pause" ); return 0; } |
|
CodeMeister |
» 2012-11-29 19:58:27 Łoooo kurde... ale kod :D
Nie no, jeśli post jest już 2 dni bez odpowiedzi to chyba nikomu się tego kodu nie chce czytać, nie można go uprościć? |
|
Admixior |
» 2012-11-29 20:18:29 hmm... pierwsze to trzeba usunąć if z continue; drugie:
żeby obliczyć nie permutacje ale liczbę kombinacji zakładając że możemy używać tych samych liczb to taki jest wzór: 49*49*49*49*49*49 więc 6 pętli i po 49 w każdym. A żeby obliczyć permutacje to musisz 49*48*47*46*45*44 dlatego że w każdym kolejnym kroku masz o jedną liczbę mniej niż wcześniej (bo zostały one wcześniej użyte), czy to była liczba 5 czy 10 to mało ważne bo ty masz tylko zliczyć, więc (tak mi się wydaje) że wystarczy po prostu w każdej kolejnej pętli odejmować po jednym od 49.
//down: racja. żeby policzyć liczbę kombinacji trzeba zastosować silnie 1*2*3*4*...*47*48 //(49-1)! z tym że wtedy nie będzie na pętli zagnieżdżonej :( więc musiał byś zrobić 48 zagnieżdżonych pętli i zliczać (każda pętla kończyła by się o jeden więcej niż poprzednia). Lub zrobić jedną pętlę liczącą krok - "i", i drugą dodającą jeden dopóki "x<i" ;] Mam nadzieję że za bardzo nie podpowiedziałem;] |
|
Mrovqa |
» 2012-11-29 20:46:57 @Admixior pomyliłeś permutacje z kombinacjami. 1 2 2 1 To dwie różne permutacje, ale te same kombinacje. /edit: żeby policzyć liczbę kombinacji trzeba zastosować silnie 1*2*3*4*...*47*48 //(49-1)! |
Eh... Liczbę kombinacji liczby się inaczej. Słyszałeś o czymś takim, co zwie się symbolem newtona? (n k)=n!/(k!*(n-k)!) - oznacza liczbę kombinacji. Poza tym - jak pisze w treści zadania - losujemy 6 liczb. |
|
« 1 » |