Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak to ugryźć , zbiór liczb i szukanie czy część suma części z nich da daną liczbę., Nie mam pomysłu
icemanwlkp
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 29.09.2010

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


Witam , mam taki problem . Jest tabela z liczbami z dwoma miejscami po przecinku . I teraz mam napisać skrypt który wyłowi liczby z tej tablicy których suma da daną liczbę , lub stwierdzić iż nie ma takiej kombinacji .
Jak zabrać się do takiego skryptu ? Jakieś pomysły podpowiedzi ?

Przykład:

  1. $liczby = Array("2.56","1.74","1.69","2.44","1.53","2.45","1.21","2.62","2.33","1.21","2.69","3.24","1.87","1.75","2.02","1.80","1.78");
  2. $szukana = '20.00';
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
icemanwlkp
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 29.09.2010

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


Dla 5 liczb działa , powyżej nie wywala już nic , gdzie tkwi problem ?


  1. function power_perms($arr) {
  2.  
  3. $power_set = power_set($arr);
  4. $result = array();
  5. foreach($power_set as $set) {
  6. $perms = perms($set);
  7. $result = array_merge($result,$perms);
  8. }
  9. return $result;
  10. }
  11.  
  12. function power_set($in,$minLength = 1) {
  13.  
  14. $count = count($in);
  15. $members = pow(2,$count);
  16. $return = array();
  17. for ($i = 0; $i < $members; $i++) {
  18. $b = sprintf("%0".$count."b",$i);
  19. $out = array();
  20. for ($j = 0; $j < $count; $j++) {
  21. if ($b{$j} == '1') $out[] = $in[$j];
  22. }
  23. if (count($out) >= $minLength) {
  24. $return[] = $out;
  25. }
  26. }
  27.  
  28. //usort($return,"cmp"); //can sort here by length
  29. return $return;
  30. }
  31.  
  32. function factorial($int){
  33. if($int < 2) {
  34. return 1;
  35. }
  36.  
  37. for($f = 2; $int-1 > 1; $f *= $int--);
  38.  
  39. return $f;
  40. }
  41.  
  42. function perm($arr, $nth = null) {
  43.  
  44. if ($nth === null) {
  45. return perms($arr);
  46. }
  47.  
  48. $result = array();
  49. $length = count($arr);
  50.  
  51. while ($length--) {
  52. $f = factorial($length);
  53. $p = floor($nth / $f);
  54. $result[] = $arr[$p];
  55. array_delete_by_key($arr, $p);
  56. $nth -= $p * $f;
  57. }
  58.  
  59. $result = array_merge($result,$arr);
  60. return $result;
  61. }
  62.  
  63. function perms($arr) {
  64. $p = array();
  65. for ($i=0; $i < factorial(count($arr)); $i++) {
  66. $p[] = perm($arr, $i);
  67. }
  68. return $p;
  69. }
  70.  
  71. function array_delete_by_key(&$array, $delete_key, $use_old_keys = FALSE) {
  72.  
  73. unset($array[$delete_key]);
  74.  
  75. if(!$use_old_keys) {
  76. $array = array_values($array);
  77. }
  78.  
  79. return TRUE;
  80. }
  81.  
  82. $in = array("256","174","169","244","153","245","121","262","233","121","269","324","187","175","202","180","178");
  83. $power_perms = power_perms($in);
  84.  
  85. foreach ($power_perms as $p)
  86. {
  87. print_r($p);
  88. echo '<br>';
  89. }
Go to the top of the page
+Quote Post

Posty w temacie
- icemanwlkp   Jak to ugryźć , zbiór liczb i szukanie czy część suma części z nich da daną liczbę.   21.09.2016, 11:13:39
- - nospor   Tworzysz wszelkie mozliwe kombinacje sum i sprawdz...   21.09.2016, 11:17:16
- - icemanwlkp   I nadal mam pustkę w głowie jak to rozpisać w php ...   21.09.2016, 11:35:10
- - nospor   Nie bardzo rozumiem. Nie wiesz jak zrobic wszystki...   21.09.2016, 11:36:39
- - markonix   http://stackoverflow.com/questions/1083439...ons-o...   21.09.2016, 11:40:46
- - Pyton_000   Śmierdzi mi tu Amino, czyż nie ?   21.09.2016, 12:29:18
- - Crozin   1. Na początek przemnóż sobie wszystkie liczby prz...   21.09.2016, 12:37:27
- - nospor   @Crozin niestety autor tematu nie oczekuje algoryt...   21.09.2016, 12:44:20
- - lukaskolista   Nie wiem czy o to chodzi, tak bardzo ale to bardzo...   21.09.2016, 12:44:43
- - Pyton_000   @nospor chodziło o to że Amino jakiś czas temu w z...   21.09.2016, 12:50:14
- - nospor   @lukaskolista przeciez twoje rozwiazanie sumuje ty...   21.09.2016, 12:52:32
- - icemanwlkp   Nie do Amino ,ale księgowa mnie meczy odnośnie tak...   21.09.2016, 13:47:58
- - nospor   Dostales gotowe kody, szczegolnie fajny ten co ci ...   21.09.2016, 13:52:57
- - markonix   Weź mój przykład, zamiast tekstu rób tablice, będz...   21.09.2016, 14:11:55
- - icemanwlkp   Cosik mi nie wychodzi , kurka ... wyniki , są ale ...   21.09.2016, 16:36:43
- - nospor   Wlasnie sprawdzilem przyklad do ktorego cie odesla...   22.09.2016, 14:16:45
- - icemanwlkp   Dla 5 liczb działa , powyżej nie wywala już nic , ...   23.09.2016, 08:38:47
- - nospor   MI tam dziala do 12. Potem sie wywala spowodu pami...   23.09.2016, 08:56:16
- - icemanwlkp   ini_set("memory_limit",-1); wstawiłem re...   23.09.2016, 09:20:31
- - nospor   Dlatego w pierwszym poscie wspomnialem o optymaliz...   23.09.2016, 09:27:20
- - icemanwlkp   No w sumie tworzy się sporo tablic zbędnych , ale ...   23.09.2016, 10:35:46
- - nospor   Cytatże nie ma właściwej konfiguracjiNie ze nie ma...   23.09.2016, 10:44:10


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: 8.10.2025 - 13:54