Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Suma liczb bez powtórzeń
colachips
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 12.01.2009

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


Witam,

Chciałbym dodać do siebie kilka liczb we wszystkich możliwych kombinacjach, ale żeby działania się nie powtarzały.. Pokaże kod jaki zrobiłem

  1.  
  2. $liczby = $_POST['liczby'];
  3.  
  4. for ($i = 1; $i <= count($liczby); $i++) {
  5. for ($j = 1; $j <= count($liczby); $j++) {
  6. echo 'Liczba '.$liczby[$i].' + Liczba '.$liczby[$j].' = '.($liczby[$i]+$liczby[$j]).'<br />';
  7. }
  8. }
  9.  


Problem w tym, że powtarza działania, czyli np.

$liczby[1] = 111;
$liczby[2] = 222;
$liczby[3] = 333;

W wyniku tego petla wyświetli:

Liczba 111 + Liczba 111 = 222 //ok
Liczba 111 + Liczba 222 = 333 //ok
Liczba 111 + Liczba 333 = 444 //ok
Liczba 222 + Liczba 111 = 333 //blad, ta kombinacja juz byla

Będę wdzieczny za naprowadzenie na właściwy trop
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





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




Nie. Musisz zauważyć pewne zależności przy kolejnych kombinacjach i odpowiednio je zrealizować. Ale powiedz do czego ci to potrzebne?
Nie wiem czy wyszło mi dobrze ale sprawdź
  1. $tab = range(1,6);
  2. $ile = count($tab);
  3.  
  4. $firstNumber = 0;
  5. $results = array();
  6.  
  7. while($firstNumber < $ile)
  8. {
  9. $rangeBegin = $firstNumber+1;
  10. $rangeEnd = $rangeBegin; // $firstNumber+1 :)
  11.  
  12. $results[] = $tab[$firstNumber].' + '.$tab[$firstNumber].' = '.($tab[$firstNumber]*2);
  13. while( !($rangeBegin==$rangeEnd && $rangeEnd == $ile) )
  14. {
  15. //zakres dodawanych liczb
  16. $rangeStr = '';
  17. $rangeSum = 0;
  18. for($i=$rangeBegin; $i<$rangeEnd; $i++)
  19. {
  20. $rangeStr .= ' + '.$tab[$i];
  21. $rangeSum += $tab[$i];
  22. }
  23.  
  24. // no i wynik
  25. for($c = $rangeEnd; $c<$ile ; $c++)
  26. {
  27. $results[] = $tab[$firstNumber].$rangeStr.' + '.$tab[$c].' = '.($tab[$firstNumber] + $tab[$c] + $rangeSum);
  28. }
  29.  
  30. // zmieniamy zakresy liczb dodawanych
  31. $rangeEnd++;
  32. if($rangeEnd >= $ile)
  33. {
  34. $rangeBegin++;
  35. if($rangeBegin >= $ile) break;
  36.  
  37. $rangeEnd = $rangeBegin + 1;
  38. }
  39. }
  40.  
  41. $firstNumber++;
  42. }
  43.  
  44. print_r($results);


Jeżeli coś nie pasuje to masz solidny początek, który możesz sobie zmodyfikować.

Ten post edytował wookieb 11.09.2009, 09:41:43
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 02:34