Професионална програма
Loading...
+ Нов въпрос
Eljei avatar Eljei 3 Точки

09.PokemonDontGo

Бая се поизмъчих на тази задача . Погледнах решения на колеги и знам , че моето не е много практично и може доста да се съкрати. И все пак искам да знам къде греша . Ако някой би могъл да ми обясни защо на вторият 'case' като условието си връща false програмата влиза в него , както и защо не влиза в първия 'case' като с var_dump условието връща true ... грешката е при подаване на вход 0. Например 0 >= 0 - false ? 

"решение"  - https://pastebin.com/CeR2mfi6

условие - https://softuni.bg/trainings/resources/officedocument/40842/exercise-php-fundamentals-may-2019/2344

Тагове:
1
PHP Fundamentals 20/09/2019 01:22:33
willystyle avatar willystyle 2194 Точки
Best Answer

Здравей, решението ти си е доста практично, четливо и кратко. Дори работи на 100, единствено не си разбрал как работи оператора switch: той влиза в различните случай (case) при условие, че променливата подадена на суитч е равна (не стриктно ==, не чак ===) на експрешъна подаден в кейс, прочети https://www.php.net/manual/en/control-structures.switch.php.

Та ти в експрешъните подаваш условия (булеви, които се коерсват до 0 или 1). Суитч се прилага само при изброими стойности, а не при диапазони.И това е в почти всички езици.

<?php 
$arr = array_map('intval', explode(' ', readline()));
$arrDeletedElements = [];
while (true) {
    if (count($arr) == 0) {
        $sum = 0;
        for($i = 0; $i < count($arrDeletedElements); $i++) {
            $sum += $arrDeletedElements[$i];
        }
        echo $sum;
        return;
    }
    $index = intval(readline());    
	if ($index >= 0 && $index < count($arr)) {
		$valueElement = $arr[$index];
        array_splice($arr, $index, 1);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	} else if ($index < 0) {
		$valueElement = $arr[0];
        array_splice($arr, 0, 1, $arr[count($arr)-1]);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	} else if ($index > count($arr)-1) {
		$valueElement = $arr[count($arr)-1];
        array_splice($arr, count($arr)-1, 1, $arr[0]);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	}    
}
 
function increaseOrDecrease($array, $deletedEle)
{
    for($i = 0; $i < count($array); $i++) {
        if ($array[$i] <= $deletedEle) {
            $array[$i] += $deletedEle;
        } else {
            $array[$i] -= $deletedEle;
        }
    }
    return $array;
}

 

0
Eljei avatar Eljei 3 Точки

Много ти благодаря. Явно не съм обърнал достатъчно внимание на switch case. Поне вече ще знам :d. 

Благодаря отново и лек ден :) !

1