13. april 2010 - 11:57
Der er
16 kommentarer og 1 løsning
Mulige forskellige talkombinationer
Hej Hvis nu der er fra 1 til 10, og man gerne vil finde mulige "3-talskombinationer" indenfor 1 til 10, hvordan gør man det nemmest? Altså: 123 124 125 126 o.s.v. 234 235 236 F.eks. vil flg. finde de 2 tals kombinationer der er: function kombinationer($max=10) { $mulige = array(); for($i = 1; $i < $max; $i++) { $mulige[$i] = array(); for($a = ($i+1); $a <= $max; $a++) { $mulige[$i][] = $a; } } return $mulige; } Men den duer jo kun til to talskombinationer. Hvordan laver man en funktion som finder mulige antal x talskombinationer ? F.eks. 3 eller 4 tals kombinationer.
Annonceindlæg fra DE-CIX
13. april 2010 - 12:15
#1
13. april 2010 - 12:25
#2
Hmm, ja, bortset fra jeg har glemt ALT om matematik fra HF af :O) Og resultatet skal ikke være antal gange, men mulige kombinationer. (10*9*8)/(3'2'1)
13. april 2010 - 12:42
#3
Jeg skal ud af døren, men den er der næsten: function create_combs($max, $antal=2) { $mulige = array(); $start = ($antal > 1 ? (($max+1)-$antal) : $max); for($i = 1; $i < $start; $i++) { $mulige[$i] = array(); $next = ($i+1); for($a = $next; $a <= $start; $a++) { if($antal > 1) { $tal = array(); $nextnr = ($a+1); while($nextnr <= $max) { $tal[] = $a; $tal[] = ($nextnr); $nextnr = ($nextnr+1); } // Her skal fixes $mulige[$i][] = implode(",",$tal); }else{ $mulige[$i][] = $a; } } } return $mulige; } Vil gerne ha' et array med key for hvert tal, og komma mellem hvert tal i kombination. Array ( [1] => Array ( [0] => 2,3 [1] => 2,4 [2] => 2,5 [3] => 2,6 [4] => 2,7 [5] => 2,8 [6] => 2,9 [7] => 2,10 } }
13. april 2010 - 12:43
#4
Hov, det skal jo blot være $nextnr++ i while
13. april 2010 - 12:44
#5
for($a=1; $a<10; $a++){ for($b=1; $b<10; $b++){ for($c=1; $c<10; $c++){ echo $a.$b.$c."<br>"; } } }
13. april 2010 - 12:52
#6
Knap og nap Troede ellers lige at det var så simpelt, men den rammer ikke rigtigt.
13. april 2010 - 13:00
#7
13. april 2010 - 18:37
#8
Tror det her virker.. test gerne efter med lommeregner :) Der hvor der står 10 under $fact1 er det antal kobinationer. og under $fact2 (10-3) 10 er igen det samme og 3 er med det antal du vil have (3-talskombinationer). Måden den regner på er ved at sige fact(10) - 10 * 9 * 8 ... * 1 Regner med du selv kan udbygge det lidt. <?php $fact1 = fact(10); $fact2 = fact((10-3)); $fact = $fact1 / $fact2; function fact($num) { if (is_numeric($num) && $num > 0) { $result = $num; for($x = $num-1; 0 < $x; $x--) { $result = $result * $x; } return $result; } echo "ERROR"; } ?>
14. april 2010 - 17:14
#9
Det på zend.com tager også 123 og 132 o.s.v. så det kan ikke bruges. jantzen88 => jeg er ikke helt med ? :O) Har dog fået brygget noget sammen: function create_combs($max, $antal=2) { $mulige = array(); $start = ($antal > 1 ? (($max+1)-$antal) : $max); for($i = 1; $i < $start; $i++) { $mulige[$i] = array(); $next = ($i+1); for($a = $next; $a <= $start; $a++) { if($antal > 1) { $tal = array(); $nextnr = ($a+1); while($nextnr <= $max) { $tal[] = $a; $tal[] = ($nextnr); $nextnr++; } $new = array_chunk($tal, $antal); $ialt = count($new); for($u = 0; $u < $ialt; $u++) { $mulige[$i][] = implode(",", $new[$u]); } }else{ $mulige[$i][] = $a; } } } return $mulige; } $talarray = create_combs(10,2); echo "<pre>"; print_r($talarray); echo"</pre>"; Det fungerer udmærket hvis jeg skal bruge mulige kombinationer mellem f.eks. 1 til 10 12 13 14 o.s.v Ligeledes hvis det skal være 123 124 125 Men hvis jeg vil ha' 1234 1245 1256 er jeg nødt til at ændre antal i array_chunk() Hvorfor nu det ?
16. april 2010 - 19:16
#10
"Hvordan laver man en funktion som finder mulige antal x talskombinationer ? F.eks. 3 eller 4 tals kombinationer." f.eks. tal række 1 til 10 $resultat = fact(10) / fact((10-3)); $resultat er så 720 dvs. der er 720 forskellige muligheder på en tal række 1 til 10 med 3 tal. 123 124 256 osv.
16. april 2010 - 19:46
#11
jantzen88 => Kan godt se din logik, men hvordan får du dem udskrevet ?
16. april 2010 - 19:50
#12
Lad os sige 5 er højeste tal. Så skal alle kombinationer med to tal hentes. 12 13 14 15 23 24 25 34 35 45
16. april 2010 - 19:51
#13
Og 12 og 21 er en og samme kombination.
16. april 2010 - 22:15
#14
Kunne godt være jeg skulle give dig den rigtige formel.. fact(10) / (fact(3) * fact(10 - 3)) som så blir 120. og med fact(5) / (fact(2) * fact(5 - 2)) som blir 10. Du kan ikke skrive kombinationer, kun hvor mange
17. april 2010 - 06:31
#15
På et stykke papir ville det være: 5*4 = 20 2*1 = 2 20/2 = 10 "Du kan ikke skrive kombinationer, kun hvor mange" er noget vrøvl.
19. april 2010 - 19:37
#16
Nåh, er kommet frem til flg. <?php function combinations($max, $antal) { $mulige = array(); $start = ($antal > 1 ? (($max+1)-$antal) : $max); for($i = 1; $i < $start; $i++) { $mulige[$i] = array(); $next = ($i+1); for($a = $next; $a <= $start; $a++) { if($antal > 1) { $tal = array(); $nextnr = ($a+1); while($nextnr <= $max) { $tal[] = $a; $tal[] = $nextnr; $nextnr++; $subnr = $nextnr; for($n = 0; $n < ($antal-2); $n++) { $tal[] = $subnr; $subnr++; } } $new = array_chunk($tal, ($antal)); $ialt = count($new); $delkey = ($antal-1); for($u = 0; $u < $ialt; $u++) { if($new[$u][$delkey] > $max) { continue; } $mulige[$i][] = implode(",", $new[$u]); } }else{ $mulige[$i][] = $a; } } } return $mulige; } $vars = combinations(6,3); echo "<pre>"; print_r($vars); echo"</pre>"; ?> Hvis der er en som kan forenkle koden, er der point.
21. april 2010 - 19:29
#17
Lukker her
Vi tilbyder markedets bedste kurser inden for webudvikling