Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Losowanie wszystkich liczb ze zbioru <-5,5> bez powtórzeń i wyświetlenie w formacie (a,b)
zgrywusik88
post 27.02.2010, 17:45:31
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 6.11.2009

Ostrzeżenie: (0%)
-----


Witam

Próbuje już od dwóch dni wylosować wszystkie liczby ze zbioru <-5,5> i wypisać wszystkie możliwości tego w formacie ( a,b ) wiem że takich kombinacji jest 121.
a i b to liczby z tego zbioru, a i b może być ujemne i dodatnie.
Ten zbiór zawiera takie liczby -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
Chodzi o to aby wyświetlało mi takie coś

(-4,2)
(1,4)
(1,-5)

Mi na razie udało się stworzyć takie coś:

  1. $licznik = 0;
  2.  
  3.  
  4. for (; $licznik<121; $licznik++) {
  5.  
  6. $a = rand(-5, 5);
  7. $b = rand(-5, 5);
  8. $c = "($a, $b)";
  9.  
  10.  
  11. echo "$c";
  12. echo "<br>";
  13. }


co wyświetla mi te liczby ale zdarzają się powtórzenia

Go to the top of the page
+Quote Post
wookieb
post 27.02.2010, 18:04:37
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A po co losować skoro możesz wybrać z tablicy i po kolei wstawiać?
  1. $tab = range(-5, 5);
  2. $length = count($tab);
  3. $combinations = array();
  4. for($i=0; $i<$length; $i++)
  5. {
  6. for($b=0; $b<$length; $b++)
  7. {
  8. $combinations[] =$tab[$i].' - '.$tab[$b];
  9. }
  10. }
  11.  
  12. print_r($combinations);


Ten post edytował wookieb 27.02.2010, 18:04:48


--------------------
Go to the top of the page
+Quote Post
thek
post 27.02.2010, 18:07:41
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




By zrobić to bez powtórzeń, musiałbyś mieć tablicę wykluczającą wylosowane już pary liczb. Jesli znasz liczbę wszystkich kombinacji to sprawa nie jest trudna. Przedstawię algorytm i podpowiem funkcje...

1. Utwórz pustą tablicę dla wylosowanych ( array() )
2. Wylosuj parę ( rand() )
3. Sprawdź czy jest ona w tablicy wylosowanych ( in_array() )
4. Jeśli jest - idź do kroku 2)
5. Jeśli nie - dodaj ją do tablicy wylosowanych.
6. Sprawdź czy wielkość tablicy wylosowanych nie jest już wielkością maksymalną.
7. Jeśli tak - koniec
8. Jeśli nie - idź do kroku 2)

To proste jesli zrobisz parę wylosowana jako jeden string w postaci choćby '(a, cool.gif', bo wyszukanie czy taki element występuje w tablicy jest wtedy proste przy użyciu in_array() jako "szukajki".

EDIT: wookieb dał najprostsze rozwiązanie, jeśli oczywiście ma to być po prostu wypisanie wszystkich kombinacji. Jesli ma to być już z jakimś elementem losowości to pokombinuj z moim agorytmem, bo jego implementacja jest niemal równie krótka jak algorytm kolegi powyżej smile.gif

Ten post edytował thek 27.02.2010, 18:09:52


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
wookieb
post 27.02.2010, 18:20:37
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Niestety kolega nie pomyślał, bo jak można "wylosować" wszystkie kombinacje liczb ze zbioru?


--------------------
Go to the top of the page
+Quote Post
Cysiaczek
post 27.02.2010, 18:27:16
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Można wylosować kolejność ich prezentacji smile.gif


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zgrywusik88
post 27.02.2010, 18:43:33
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 6.11.2009

Ostrzeżenie: (0%)
-----


Nie do końca mi chodziło o to co stworzył wookieb ale pomogło mi to bardzo w rozwiązaniu problemu, zmodyfikowałem jego kod i udało mi się stworzyć to co mnie interesowało a więc dziex wszystkim, odwdzięczyłem się jak trzeba dla wookieb'a i thek'a który też pomógł biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:47