Задача №14 - Значения, отсутствующие в массиве

Задача №14 из этого списка:

Условие задачи:

На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20. Задача: вывести на экран все числа, которые не содержатся в массиве

$b = [12, 5, 17, 6, 4];

Решите эту задачу двумя способами:
1. Без использования in_array()
2. С использованием in_array() (что проще)

Мое решение:

Реализация №1 (без использования in_array()):

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}

function valuesNotInArray ($x){
    $m = 1;
    for ($i = 0; $i < 20; $i++){
        $arr0[$i] = $m;
        $m++;
    }
    $result = array_diff($arr0, $x);
    foreach ($result as $key => $value){
        echo $value . ', ';
    }

}

$a = createArray(10);
var_dump($a);
valuesNotInArray($a);
melisa's picture

Вы неверно поняли условие задачи. Ваш массив из 10 элементов необходимо сравнивать с масивом $b.

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}

function valuesNotInArray ($x, $y){
    $result = array_diff($x, $y);
    foreach ($result as $key => $value){
        echo $value . ', ';
    }

}
$b = [12, 5, 17, 6, 4];
var_dump($b);
$a = createArray(10);
var_dump($a);
valuesNotInArray($a, $b);
melisa's picture

  1. Хорошо, но данное решение аналогично второму, с помощью in_array(). Представьте вариант решения без помощи функций.
  2. foreach ($result as $key => $value)

    Если Вы не используете в теле цикла ключи массива, можно использовать сокращённую запись:

    foreach ($result as $value)

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}
function valueNotInArray($x, $y){
    $k = 0;
    for ($i = 0; $i < count($x); $i++) {
        for ($j = 0; $j < count($y); $j++) {
            if ($x[$i] == $y[$j]) {
                $k++;
            }
        }
            if ($k == 0) {
                echo $x[$i] . ', ';
            } else {
                $k = 0;
            }
    }
}
$b = [12, 5, 17, 6, 4];
var_dump($b);
$a = createArray(10);
var_dump($a);
valueNotInArray($a, $b);
melisa's picture

ошибка в отступах вложенной конструкции if:

for ($i = 0; $i < count($x); $i++) {
    for ($j = 0; $j < count($y); $j++) {
        if ($x[$i] == $y[$j]) {
            $k++;
        }
    }
        if ($k == 0) {
            echo $x[$i] . ', ';
        } else {
            $k = 0;
        }
}

а так, верно

Реализация №1.2:

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}
function valueNotInArray($x, $y){
    $k = 0;
    for ($i = 0; $i < count($x); $i++) {
        for ($j = 0; $j < count($y); $j++) {
            if ($x[$i] == $y[$j]) {
                $k++;
            }
        }
        if ($k == 0) {
            echo $x[$i] . ', ';
        } else {
            $k = 0;
        }
    }
}
$b = [12, 5, 17, 6, 4];
var_dump($b);
$a = createArray(10);
var_dump($a);
valueNotInArray($a, $b);
melisa's picture

принято

Реализация №1.1:

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}

function valuesNotInArray ($x, $y){
    $result = array_diff($x, $y);
    foreach ($result as $value){
        echo $value . ', ';
    }

}
$b = [12, 5, 17, 6, 4];
var_dump($b);
$a = createArray(10);
var_dump($a);
valuesNotInArray($a, $b);
vedro-compota's picture

Поправил условие, чтобы было понятнее: http://fkn.ktu10.com/?q=comment/3012#com...

_____________
матфак вгу и остальная классика =)

Реализация №2 (с использованием in_array()):

<?php
function createArray ($n){
    for ($i = 0; $i < $n; $i++){
        $arr[$i] = rand(1, 20);
    }
    return $arr;
}
function valueNotInArray($x, $y){
    for ($i = 0; $i < count($x); $i++){
        if (!in_array($x[$i], $y)) {
            echo $x[$i] . ', ';
        }
    }
}
$b = [12, 5, 17, 6, 4];
var_dump($b);
$a = createArray(10);
var_dump($a);
valueNotInArray($a, $b);
melisa's picture

2 вариант принят