Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Łączenie liczb
slawo
post 21.09.2016, 19:02:00
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


Witajcie, nie wiem jak zatytułować mój temat. Załóżmy, że mamy klocki z wartościami:

1 / 1,25 / 1,5 / 2 / 2,5 / 3 / 5 / 10 / 15 / 20

Chcę aby skrypt dobrał mi jak najmniejszą ilość klocków aby wyszła wpisana wartość.

Przykład: podaje wartość 18

Chciałbym aby skrypt dobrał: 15 + 3

Błędne: 3 + 5 + 10

Klocki nie mogą się powtarzać: 5 + 5 + 3

Proszę o jakieś wskazówki, nie wiem jak się z to zabrać closedeyes.gif


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post 22.09.2016, 09:13:35
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Łopatologiczne smile.gif

  1. <?php
  2.  
  3. $liczby = [1, 1.25, 1.5, 2, 2.5, 3, 5, 10, 15, 20];
  4. $szukana = 18;
  5.  
  6. $wyniki = [];
  7. rsort($liczby);
  8.  
  9. for($i=0, $c=count($liczby); $i<$c; $i++) {
  10. if($liczby[$i] > $szukana){
  11. continue;
  12. }
  13. $wyniki[$i][] = $liczby[$i];
  14.  
  15. if($liczby[$i] == $szukana) {
  16. continue;
  17. }
  18.  
  19. for($j=0; $j<$c; $j++) {
  20. if($j == $i) {
  21. continue;
  22. }
  23. $sum = array_sum($wyniki[$i])+$liczby[$j];
  24. if($sum > $szukana) {
  25. continue;
  26. }
  27. $wyniki[$i][] = $liczby[$j];
  28.  
  29. if($sum == $szukana) {
  30. break;
  31. }
  32.  
  33. }
  34. sort($wyniki[$i]);
  35. }
  36. array_walk($wyniki, function(&$val) {
  37. $val = implode(',', $val);
  38. });
  39.  
  40. $wyniki = array_unique($wyniki);
  41. var_dump($wyniki);
Go to the top of the page
+Quote Post

Posty w temacie


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 - 18:43