Учебные задачи PHP. Задача 14
Primary tabs
Решение для задачи из списка
<?php /** * Решение для задачи №14 из курса PHP * * Есть два массива "a" и "b". На вход вашей программе подаётся массив "a" * случайных чисел (10 элементов) из диапазона от 1 до 20. * Задача: вывести на экран все числа, которые не содержатся в массиве "b" * $b = [12, 5, 17, 6, 4]; * Решите эту задачу двумя способами: * Без использования in_array() (link is external) * С использованием in_array() (link is external) (что проще) */ $arraysCount = 10; $needlesArray = getRandomArray($arraysCount); $arrayHaystacks = getRandomArray($arraysCount); echo "В первом массиве:<br>"; showArray($needlesArray); echo "<br>Во втором массиве:<br>"; showArray($arrayHaystacks); echo "<br>Элементы первого массива отсутствующие во втором:<br>"; showArray(showDiff($needlesArray, $arrayHaystacks)); function showDiff($arrayOne,$arrayTwo) { $differences = []; foreach ($arrayOne as $value) { if (in_array($value, $arrayTwo)){ continue; } else { $differences[] = $value; } } return $differences; } function showArray($array) { foreach ($array as $key => $value) { echo $key." - ".$value."<br>"; } } function getRandomArray($count) { $numbers = []; for ($i = 0; $i < $count; $i++) { $numbers[$i] = rand(1, 20); } return $numbers; } ?>
- Log in to post comments
- 10156 reads
toyrik
Fri, 09/13/2019 - 21:38
Permalink
Второй вариант
Ну так то понятно что использование включённых в язык функций удобнее,
хотя и в них есть свои особенности
(примеров привести не могу, но наверняка есть...)
vedro-compota
Mon, 09/16/2019 - 23:13
Permalink
замечания
1)
-- решение хорошее, но использовать тут переменную $concurrence вовсе не обязательно, дайте альтернативное решение, без этой переменной ну и за одно без использования массива для результата (печатайте прямо в функции).
2)
в реальной разработке конечно надо использовать готовые функции, в т.ч. потому что они работают сильно быстрее, но тут стоит цель проверить возможности алгоритмизации, поэтому запрашиваем разные способы решения.
_____________
матфак вгу и остальная классика =)
toyrik
Tue, 09/17/2019 - 10:52
Permalink
Альтернатива без массива
vedro-compota
Tue, 09/17/2019 - 10:57
Permalink
а если бы было 100000 элементов?
а если бы элементов в массиве было 100000 ? Такое вообще никогда писать не следует. Исправьте.
_____________
матфак вгу и остальная классика =)
toyrik
Tue, 09/17/2019 - 12:08
Permalink
Поправил
vedro-compota
Tue, 09/17/2019 - 23:03
Permalink
замечания и сомнения
-- это явно лишнее, можно использовать if в неполной форме....и потом вообще есть сомнения, что этот код правильный. Дайте версию, которую можно запустить - с вызовом функции и формированием массивов
_____________
матфак вгу и остальная классика =)
toyrik
Tue, 09/17/2019 - 23:10
Permalink
Как то так....
vedro-compota
Tue, 09/17/2019 - 23:18
Permalink
замечания
-- в этом блоке не нужны ни break; (меняем условие на обратное) ни continue; (т.к. тут это оператор вообще в конце витка приведен)
_____________
матфак вгу и остальная классика =)
toyrik
Sun, 09/22/2019 - 13:31
Permalink
Ну...
break там всё равно будет нужен, иначе будут выводится все числа первого массива.
vedro-compota
Sun, 09/22/2019 - 21:00
Permalink
хорошо, далее переделайте так
хорошо, далее переделайте так, чтобы внутренний цикл обходился без проверки вложенных if-ом:
_____________
матфак вгу и остальная классика =)
toyrik
Mon, 09/23/2019 - 12:01
Permalink
Не смог придумать ничего умнее..
А чем плох внутренний if?
vedro-compota
Mon, 09/23/2019 - 12:05
Permalink
А чем плох внутренний if?
лишней операцией на сравнение и лишним кодом, а вот переменную-флаг можно было бы назвать и более понятным образом)
Задача засчитана)
_____________
матфак вгу и остальная классика =)