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




Wiem, ale dałem mu taką podstawę z której będzie mógł kombinować resztę.

// EDIT Ponieważ miałem sporo błędów to postanowiłem, zrobić to zupełnie inaczej.
  1. // Skrypt tworzy możliwe kombinacje dodawania liczb. (bez powtarzania liczby w działaniu) metoda bitowa
  2. // np
  3. /*
  4.  1 + 2 = 3
  5.  1 + 3 = 4
  6.  1 + 4 = 5
  7.  1 + 2 + 3 = 6
  8.  1 + 2 + 4 = 7
  9.  itd
  10. */
  11. $tab = range(1,10);
  12. $ile = count($tab);
  13.  
  14. $num = str_repeat('1', $ile);
  15. $num = bindec($num); // mamy (prawie) wyliczoną liczbę możliwych kombinacji
  16.  
  17. $tmpNum = $num;
  18. $results = array();
  19.  
  20. while($tmpNum > 0)
  21. {
  22. // zeby errorow nie bylo
  23. $tmpNumStr = str_pad(decbin($tmpNum), $ile, '0', STR_PAD_LEFT);
  24.  
  25. $sum = 0;
  26. $sumStr = '';
  27. $numsAdded = 0;
  28.  
  29. for($i=0; $i<$ile; $i++)
  30. {
  31. // czy wstawic liczbe
  32. if($tmpNumStr[$i] == '1')
  33. {
  34. $sum+= $tab[$i];
  35. $sumStr.=' + '.$tab[$i];
  36. $numsAdded++;
  37. }
  38. }
  39. // jezeli tylko jedna liczba to nie jest to działanie
  40. if($numsAdded>1)
  41. {
  42. $results[] = substr($sumStr, 3).' = '.$sum;
  43. }
  44.  
  45. $tmpNum --;
  46. }
  47. print_r($results);


Ten post edytował wookieb 11.09.2009, 12:04:10
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 6.10.2025 - 06:34