![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 19.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hej
Proszę o pomoc, chciałbym wylosować 10 liczb ze 100. Mógłbym użyć funkcji rand(), ale czasami zdarzają się powtórzenia liczb np. 10 i 10. Jak mógłbym uniknąć powtórzeń ? Z góry dzięki za pomoc. Ten post edytował jam09 22.01.2011, 19:50:09 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
Jeżeli chcesz korzystać z rand() to postaw warunek if(wylosowana liczba == poprzednia liczba) losuj jeszcze raz.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
jeżeli chodzi o niepowtarzający się, to użyj md5(microtime)
-------------------- LS Easter egg < |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 19.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli jest inna metoda niż rand() to z chęcią bym skorzystał.
Daiquiri Jak sobie wyobrażasz 10 liczb porównywać ? Każdą liczbę trzeba sprawdzić przez 9 liczb. To będzie 90 if. Jak dla mnie straszne opóźnienie. Zresztą skąd mam mieć pewność że nie wylosuje znowu liczby, która była już wylosowana ? Można by było puścić to jeszcze raz, a potem jeszcze raz, aż do skutku ale ile zajmie to czasu ? Nie ma czegoś czym by było lepiej i szybciej ? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jaka jest maksymalna pula? Jeżeli jest to 100, 1 000 czy 10 000 możesz najpierw wygenerować sobie te wszystkie elementy po czym z nich wylosować 10:
Możesz też po prostu losować liczbę i sprawdzać czy takowa nie została już wylosowana: Sposobów jest cała masa... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
No co Ty - porównujesz 10 zmiennych nie 90
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@Crozin:
Mam lekkiego bzika na punkcie Nesquika i optymalizacji wydajności kodów, więc pozwolę sobie nieco zmodyfikować Twój kod. Lepiej zamiast in_array() skorzystać z isset() i nieco zmienić sposób przechowywania wylosowanych liczb.
Wypadałoby jeszcze pozbyć się tego count'a na rzecz zwykłego licznika, ale to już pozostawiam autorowi wątku w ramach treningu ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że ideone.com to nie najlepsza platforma do testów, ale... http://ideone.com/hN2J6 Oczywiście masz rację - odpowiednio dostosowane Twoje rozwiązanie jest bezsprzecznie szybsze. Ale na dobrą sprawę zyskujemy te 0,000004 sekundy (w przypadku normalnej platformy wyszłoby pewnie jeszcze mniej) kosztem gorszego kodu (bo jest mniej oczywisty itd.).
Czy warto? W normalnym przypadku nie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 07:50 |