Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie wszystkich liczb ze zbioru <-5,5> bez powtórzeń i wyświetlenie w formacie (a,b)
Forum PHP.pl > Forum > Przedszkole
zgrywusik88
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

wookieb
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);
thek
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
wookieb
Niestety kolega nie pomyślał, bo jak można "wylosować" wszystkie kombinacje liczb ze zbioru?
Cysiaczek
Można wylosować kolejność ich prezentacji smile.gif
zgrywusik88
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.