Autor Zpráva
Pavel_15
Profil
Zdravím, chtěl bych požádat o pomoc, nevím si rady s tímto úkolem.

Napište funkci pokus($pole), která bude vracet pole indexů rovnováhy. Index rovnováhy je index, pro který platí, že součet všech prvků pole s menším indexem je roven sumě všech prvku pole s větším indexem. Tedy např. pokud $pole bude mít prvky [-7, 1, 5, 2, -4, 3, 0], pak jsou indexy rovnováhy 3 a 6. Pro 3 totiž platí, že -7 + 1 + 5 = -4 + 3 + 0. Pro 6 platí -7 + 1 + 5 + 2 -4 + 3 = 0. Ale 7 není index rovnováhy, protože pole nemá prvek, který by měl index 7. V přídě neexistujícího indexu rovnováhy nebo chyby vracejte prázdné pole.

Zkoušel jsem to už několika způsoby a furt nic.

Děkuji za jakoukoliv nápovědu
juriad
Profil
Nikdo tady za tebe úkol nevyřeší. Ukaž kód svých pokusů, třeba objevíme, v čem děláš chyby.
Pavel_15
Profil
Mám toto jako zatím přijatelný začatek, jen nevím jak sčítat podle indexů polí:

Code:

function pokus($pole, $index) {
$delka_pole = strlen($pole);

for($i=0; $i < $delka_pole; $i++) {
$hodnota[] = substr($pole,$i,1);
}

for($k=0; $k < $index; $k++) {
$hodnota_plus = substr($pole,$k,1);
echo $hodnota_plus += $hodnota_plus;
}
}

pokus('-7152-430','3');
Joker
Profil
Pavel_15:
Aj aj.
Tak pro začátek zadání mluví o polích a ne o řetězcích, takže by bylo fajn pracovat s poli a ne s řetězci.
Alphard
Profil
Kolegové dneska nemají dobrou náladu :-) Chápu, že když člověk postrádá základní znalosti (ať již z jakéhokoliv důvodu), může být u navazujících věcí mírně znechucen a pak to radši od někoho zkopírovat a ani nečíst...

Dám vám sem trochu jiný kód. Vrací pole indexů nejvyšších prvků v poli. Základ je podobný, lze z toho docela dobře vyjít. Ať se daří.

function keys_max(array $in)
{
    $maxValue = 0; // uvažuji nezáporná čísla
    $out = array();
    
    foreach ($in as $key => $value)
    {
        if ($value == $maxValue)
        {
            $out[] = $key;
        }
        elseif ($value > $maxValue)
        {
            $out = array($key);
            $maxValue = $value;
        }
    }
    
    return $out;
}

print_r(keys_max(array(8, 5, 6, 11, 12, 8, 7, 0, 5, 12, 12, 3)));
juriad
Profil
Nabízím trošku odlišnou návodnou úlohu než Alphard. To se nedělá, takhle předbíhat ;)
Pro každý prvek vypíše všechny prvky, které jsou před ním, a všechny, které jsou za ním. Z našich dvou ukázek už snad dokážeš řešení dát dohromady.
<?php
function balanced(array $values) {
        $cnt = count($values);
        for($i = 0; $i < $cnt; $i++) {
                echo "### index = " . $i . " ###\n";

                echo "before: \n";
                for($j = 0; $j < $i; $j++) {
                        echo $values[$j] . "\n";
                }

                echo "current: " . $values[$i] . "\n";

                echo "after: \n";
                for($j = $i+1; $j<$cnt; $j++) {
                        echo $values[$j] . "\n";
                }
        }
}

balanced([-7, 1, 5, 2, -4, 3, 0]);
Poznámka pro uvědomělé: Pavlovi_15 asi bude stačit řešení v kvadratickém čase. Lineární řešení s předpočítaným polem prefixových součtů je pro začátek trochu neprůhledné.

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