За последние 24 часа нас посетили 20015 программистов и 1000 роботов. Сейчас ищут 308 программистов ...

Вывести массив и разность между суммой четных элементов и суммой нечетных элементов

Тема в разделе "PHP для новичков", создана пользователем mrnmrzv, 12 окт 2018.

  1. mrnmrzv

    mrnmrzv Новичок

    С нами с:
    11 окт 2018
    Сообщения:
    12
    Симпатии:
    0
    Адрес:
    Россия, Смоленск
    По заданию сначала нужно сгенерировать массив из 20 чисел в диапазон до 20 до 65.
    PHP:
    1. for($i=0; $i<20; $i++)
    2.     {
    3.         $arr[$i] = rand(20,65);
    4.         echo "$arr[$i]\n";
    5.     }
    Это получилось.
    Далее думала с помощью цикла найти все четные числа массива и внести их в другой отдельный массив, потом аналогично поступить с нечетными числами. С помощью функции array_sum найти сумму каждого из массивов. И с помощью array_diff найти разность и вывести результат.
    Но, естественно ничего не получилось. Что-то мне подсказывает, есть способ полегче... Не могли бы помочь разобраться.
    Заранее спасибо :)
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @mrnmrzv, если-бы в одной из ранее решенных задач не воспользовались функцией суммирования - накопили бы сумму в отдельной переменной (предварительно её инициализировав нулём).
    Вот и тут можно в двух переменных накапливать суммы четных и нечентых элементов (аналогично выводу i-го элемента массива).
    Либо, если нужна только разность - к "переменной суммы (накопителю) прибавлять значения четных и вычитать значения нечетных элементов.
    Вариантов выполнения - много :)
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Вариантов действительно много, вот например слабо извращённая форма:
    PHP:
    1. <?php
    2. ini_set('display_errors', 'On');
    3. header('Content-Type: text/html; charset=utf-8');
    4.  
    5. echo '<pre>';
    6.  
    7. foreach( $odd = array_fill_keys( range( 1, 20, 2 ), '' ) as $key=>$value ){
    8.   $odd[$key] = mt_rand( 20, 65 );
    9. }
    10. foreach( $even = array_fill_keys( range( 2, 20, 2 ), '' ) as $key=>$value ){
    11.   $even[$key] = mt_rand( 20, 65 );
    12. }
    13. $arr = $odd + $even;
    14. ksort( $arr );
    15. echo 'Массив случайных чисел<hr />';
    16. print_r( $arr );
    17. echo 'Разность суммы чётных и нечётных элемнтов массива<hr />';
    18. $sumEven = array_sum( $even );
    19. $sumOdd  = array_sum( $odd );
    20. echo "$sumEven - $sumOdd = ".( $sumEven - $sumOdd );
    21.  
    22. echo '</pre>';
    --- Добавлено ---
    @mrnmrzv, непонятно что вы хотели при помощи array_diff получить. Или всё-таки нужна разность массивов, а не разность сумм этих массивов?
     
  4. mrnmrzv

    mrnmrzv Новичок

    С нами с:
    11 окт 2018
    Сообщения:
    12
    Симпатии:
    0
    Адрес:
    Россия, Смоленск
    Да, разность сумм нужна.
    Не знаю. Искала все возможные варианты найти разность.
    Спасибо за идею.
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @mrnmrzv, или нужна разность сумм чётных значений и нечётных значений? В общем так до конца и не понятно разность чего вам нужна :D
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Valick, глянь название темы ;)
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Sail, название мало о чём говорит.
     
  8. mrnmrzv

    mrnmrzv Новичок

    С нами с:
    11 окт 2018
    Сообщения:
    12
    Симпатии:
    0
    Адрес:
    Россия, Смоленск
    Нужно вывести МАССИВ. И потом найти РАЗНОСТЬ МЕЖДУ СУММОЙ ЧЕТНЫХ элементов и СУММОЙ НЕЧЕТНЫХ элементов этого МАССИВА =)
     
  9. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @mrnmrzv, тогда мой вариант неправильный, там сумма чётных ключей элементов массива и сумма нечётных ключей элементов массива
     
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. for($i=0; $i<20; $i++){
    2.     $arr[$i] = rand(20,65);
    3. }
    4.  
    5. $odd = array_filter($arr, function($val){
    6.     return $val % 2 != 0;
    7. });  
    8.  
    9. $odd2 = array_filter($arr, function($val){
    10.     return $val % 2 == 0;
    11. });
    12.  
    13. echo array_sum($odd)%array_sum($odd2);  
     
    mrnmrzv нравится это.
  11. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    вот так нуно:
    PHP:
    1. echo '<pre>';
    2. $sumOdd = $sumEven = 0;
    3. foreach( $arr = range( 1, 20 ) as $key=>$value) {
    4.   $arr[$key] = mt_rand( 20, 65 );
    5.   if ( $arr[$key] & 1 ) $sumOdd += $arr[$key]; else $sumEven += $arr[$key];
    6. }
    7. echo 'Массив случайных чисел<hr />';
    8. print_r( $arr );
    9. echo 'Разность суммы чётных и нечётных элемнтов массива<hr />';
    10. echo "$sumEven - $sumOdd = ".( $sumEven - $sumOdd );
    11.  
    12. echo '</pre>';
     
    mrnmrzv нравится это.