Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 30] Zadanie 4

Ostatnio zmodyfikowano 2012-08-29 20:46
Autor Wiadomość
Chris4132
» 2012-08-29 09:34:13
Wydaje mi się, że jeśli to jest losowanie, to każda liczba może trafić w każdą z 49 liczb. A ty ograniczasz do 48, 47... To chyba raczej błąd. :/ W poprzednich zadaniach wszystkie pętle miały takie samo maksimum aby można było pokazać wszystkie możliwości.
P-63946
Poolpet
» 2012-08-29 18:09:12
Ograniczenie jest spowodowane tym, że liczby nie mogą się powtarzać.
Zauważ, że ostatnia kombinacja według tego toku myślenia będzie miała postać:
1, 2, 3, 4, 5, 6;
kolejna:
1, 2, 3, 4, 5, 7;
aż do ostatniej:
44, 45, 46, 47, 48, 49.

Z kolei kwestię, że kolejność wylosowanych liczb nie ma znaczenia rozwiązuje rozpoczynanie kolejnych pętli od n+1.
W pierwszej pętli wyczerpuję wszystkie kombinacje z 1 na pierwszym miejscu (1 nie wystąpi już nigdzie);
Dodając kolejną pętlę, wyczerpuję wszystkie kombinacje zaczynające się od od 1, 2 itd.

Problemem nie jest zbyt mała, ale zbyt duża liczba kombinacji - niecałe 1, 3 miliarda.


/edit:

Znalazłem błąd.

Generalnie chodziło o błędne nadanie wartości zmiennym od trzeciej pętli:
k = i+2;
l = i+3;
m = i+4;
n = i+5;

Program w ten sposób po wygenerowaniu wszystkich kombinacji dla liczb w pierwszych dwóch pozycjach 1, 2, ... podstawiał j = 3 (i+1, później j++), a w trzeciej też  k = 3 (i+2, gdzie i dalej jest 1).
Powodowało to powtarzanie się liczb (w tym przypadku 1, 3, 3, ...).

Poprawne nadanie wartości zmiennym powinno wyglądać tak:
i = 1;
j = i+1;
k = j+1;
l = k+1;
m = l+1;
n = m+1;

I program teraz zwraca 13 983 816 - dokładnie tyle, ile wychodzi z wzoru na ilość kombinacji bez powtórzeń.

To jest takie proste, jak już się na to wpadnie :)
P-63965
DejaVu
» 2012-08-29 20:46:09
No to skoro padło już rozwiązanie zadania to pozwolę sobie ten temat zamknąć - jak autor tematu uzna, że chciałby coś jeszcze dodać to niech go otworzy :)
P-63987
1 2 « 3 »
Poprzednia strona Strona 3 z 3