e-olymp 914. Модуль максимального

Задача взята с сайта e-olymp

Задача

Задана послідовність дійсних чисел. Обчислимо їх модулі. Знайдіть максимальне значення серед цих модулей.

Вхідні дані

У першому рядку задано кількість елементів $n\left(n  \leqslant 100  \right)$ у послідовності. У наступному рядку задано $n$ дійсних чисел — елементи послідовності, значення яких не первищують за модулем 100.

Вихідні дані

Виведіть максимальне значення серед цих модулей з 2 десятковими знаками.

Тести

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 0 -1 1 1.00
2 3
-1.1 1.2 -1.3
1.30
3 5
5.16 0 -7.18 3 4.99
7.18
4 4
-75.111 7.5 -5.1 75.110
75.11
5 10
-1 -2 -3 -4 -5 -6 -7 -8 -9 1
9.00

Решение

Задача сходиться до пошуку максимального елемента послідовності. Зрозуміло, що найменше можливе значення модуля числа — 0. Тому, считуючи дані зі вхідного потоку будемо порівнювати їх зі змінною, що  дорівнює 0. Якщо значення модуля числа більше за змінну — надаємо змінній значення модуля числа. Таким чином після завершення вхідного потоку змінна буде дорівнювати найбільшому числу послідовності за модулем.

  • Зараховане рішення на e-olymp
  • Код задачі на ideone

9 thoughts on “e-olymp 914. Модуль максимального

      • «Ініціалізування в циклі, без сумніву, краще, оскільки після цього тимчасова змінна видаляється» а в чем именно преимущество выделения и удаления переменной n раз? Можете развить эту мысль подробнее?

        • Вчера, проверив оба решения на e-olymp, я увидел, что решение с выделением в цикле работает даже чуть-чуть лучше, чем вне его(надеюсь, что я не перепутал ссылки, т.к. даже я почему-то свой код не вижу).Исходя из этого, мне показалось, что инициализация в цикле не играет существенной роли, однако с точки зрения большого кода,во избежание ошибок, я думаю, лучше иметь пустую переменную. Хотя, есть уже сомнения в том, что я прав:).

          • Один код работал от 1,95 ms до 2,05 ms. Второй от 1,93 ms до 2,07 ms. Никто не лучше. Время работы здесь не так просто измерить. Приходится анализировать то, во что компилируется код.

    • Забавно, так вышло, что вы писали свой комментарий одновременно с моим. Интересное решение, но советую попробовать ещё и мой вариант.

  1. Но где явно, мне кажется, нужно было бы создать ещё одну переменную — это для вычисления модуля. По сути, вы дважды вызываете функцию abs: в проверке условным оператором и при приравнивании. Возможно, было бы лучше вызвать функцию один раз, а результат записать в какую-то переменную и дальше работать с переменной. Не критично, конечно, но может несколько ускорить программу.

    • Виправьте, будьлазка, ці помилки.
    • «З умови задачі зрозуміло, що нам слід діяти жадібно» — Якщо ви маэте на увазі принцип жадібного вибору, то це не зовсім він. Звичайний пошук максимального елемента послідовності.
    • Пояснення складається лише з одного речення: «Тому, считуючи дані зі вхідного потку, будемо зрівнювати їх модуль зі змінною, що спочатку за модулем має найменше можливе значення, а саме 0, і прирівнювати їй значення модуля числа,якщо вона менше за нього.» Варто зробити декілька окремих речень. Це зробить опис більш зрозумілим та буде відповідати послідовності дій у программі.
    • Не забувайте ставити пробіл після крапки. Без цього браузер вважає, що то таке одно дивне слово з крапкою у середені.

Добавить комментарий