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
flashdev
post
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


proszę:

  1. $liczby = array(1, 2, 3, 4, 5, 6);
  2. $count = count($liczby);
  3. $vector = array();
  4. $res = array();
  5. for ($i = 0; $i < pow($count+1, $count); $i++) {
  6. $vector[0] = $i%($count+1);
  7. for( $j = 1; $j < $count; $j++ ){
  8. $vector[$j] = ($i - $vector[$j-1])/(pow(($count+1), $j))%($count+1);
  9. }
  10. $str = mkStr($vector, $liczby);
  11. if( !empty($str) ){
  12. $res[$i] = $str;
  13. }
  14. //echo $vector[0] . ' ' . $vector[1] . ' ' . $vector[2] . ' ' . $vector[3] . '<br />';
  15. }
  16.  
  17. echo '<pre>';
  18. echo '</pre>';
  19.  
  20. function mkStr(&$v, &$l){
  21. $count = count($v);
  22. $arr = array();
  23. $cnt = 0;
  24. for( $i = 0; $i < $count; $i++ ){
  25. if( $v[$i] != $count ){
  26. $arr[$cnt] = $l[$v[$i]];
  27. $cnt++;
  28. }
  29. }
  30. if( count($arr) > 1 ){
  31. sort($arr);
  32. return implode(' + ', $arr);
  33. }
  34. return '';
  35. }


Rozwiązanie nie jest zbyt dobrze napisane (bardzo obciąża komputer), ale jest najprostsze w implementacji jakie udało mi się wymyślić.
Prawdopodobnie jest to najgorsza z możliwych implementacji, ale za tą lepszą trzeba zapłacić (IMG:style_emoticons/default/smile.gif)
Jedyna zaleta tego rozwiązania jest taka, że spełnia założenia.

@wookieb Twoje rozwiązanie zwraca 56 wyników dla 6 liczb, więc chyba zapomniałeś o "kilku" (IMG:style_emoticons/default/winksmiley.jpg)
Zwróć uwagę na ogranicznik mojej pętli
  1. $i < pow($count+1, $count)

Tak, niestety jest to zależność potęgowa (x^x).
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: 3.10.2025 - 12:10