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. |
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 :)
|