Autor | Zpráva | ||
---|---|---|---|
baryy Profil |
#1 · Zasláno: 10. 8. 2011, 08:12:56
Dobrý den,
potřeboval bych pomoci s hledáním čísel které neobsahuje pole čísel, mám např. $a=Array(1,3,5,8,10,14); a jak napsat kód který vypíše chybějící čísla. Děkuji moc za pomoc. |
||
1Pupik1989 Profil |
#2 · Zasláno: 10. 8. 2011, 08:19:07
cyklus, treba for a vyhledavani hodnoty v poli. Pokud hodnota v poli nebude, zapise cislo treba do dalsiho pole. Pokud tam ale bude, tak ho preskoci.
|
||
baryy Profil |
No já zkoušel nějak takhle, ale ne a ne..
$a=Array(1,3,5,8,10,14); for ($i=0;$i<Max($a);$i++) { //echo "i=".$i." a[i]=".$a[$i]; $obsahuje = "ne"; for ($j=1;$j<=Max($a);$j++) { if ($j==$a[$i]) { $obsahuje = "ano"; break; } else $obsahuje = "ne"; } if ($obsahuje == "ne") echo $i; echo "<br />"; } |
||
Tori Profil |
#4 · Zasláno: 10. 8. 2011, 08:34:00 · Upravil/a: Tori
baryy:
Máme funkci in_array(), se kterou vám bude stačit jen jeden cyklus. Edit: Ještě pár tipů: Volání max() je lepší dát ještě před for a porovnávat proti proměnné. Výchozí hodnota $i by mohlo být nejnižší číslo z toho pole. |
||
1Pupik1989 Profil |
#5 · Zasláno: 10. 8. 2011, 08:36:24
no tak nějak, akorát druhý cyklus for vynech a mrkni na funkci in_array, ta ti vyhodnotí true nebo false.no tak nějak, akorát druhý cyklus for vynech a mrkni na funkci in_array, ta ti vyhodnotí true nebo false.
|
||
baryy Profil |
#6 · Zasláno: 10. 8. 2011, 08:40:21
Děkuji.. funguje.. no teda jednoduché jak facka :)
$a=Array(1,3,5,8,10,14); for ($i=1;$i<=Max($a);$i++) { if (!in_array($i, $a)) echo $i; } |
||
juriad Profil |
#7 · Zasláno: 10. 8. 2011, 08:42:22
nejdříve setřídit a potom forem procházím, zjišťuji jaký je rozdíl dvou po sobě jdoucích čísel, pokud je více jak jedna, tak tam chybí nějaký rozsah čísel
třídění je rychlé a pak stačí projít jen jednou, celem složitost O(n*log n) lineární složitosti jde dosáhnout, pokud víš, že chybí třeba jen jedno, nebo dvě, nebo tři čísla (pro čtyři a víc nevím), ale tam už se používají bitové operace |
||
Alphard Profil |
#8 · Zasláno: 10. 8. 2011, 11:08:04
$a=Array(1,3,5,8,10,14); print_r(array_diff(range(min($a), max($a)), $a)); |
||
Časová prodleva: 13 let
|
0