Autor Zpráva
baryy
Profil
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
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
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
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
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
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
$a=Array(1,3,5,8,10,14); 
print_r(array_diff(range(min($a), max($a)), $a));

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0