Задача по алгоритмам

  • 3
  • Недоступна
Все классические алгоритмы уже давным-давно запрограммированы. Тем не менее, задачки на алгоритмы — очень ценны. Хотя бы тем, что, развивают мышление программиста. В алгоритме поиска максимума ничего сложного и нет. Так что не медлим: пишем программу, в которой задаем положительное целое число n, затем вводим n чисел и находим максимальное среди них.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (197)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Антон Игоревич Паронько8 уровень, Москва
17 января, 11:44
КТО ТАК ФОРМУЛИРУЕТ ЗАДАЧУ!? НАПИШИТЕ НОРМАЛЬНЫЕ УСЛОВИЯ, А НЕ НА КОЛЕНКЕ В МЕТРО!
Dr Evil7 уровень, Киев
14 января, 12:20
Sorry for my comment being in English, but you should all start getting used to and learn how to read documentation in English. If your read a bit about ArrayList + Collections, this task becomes very easy. 1) Create an int variable for the size of the list (e.g. int nSize = Integer.parseInt(reader.readLine()) ). 2) Create an if-else statement. 3) In the if statement => create a check that the list size is over 0. 4) If true, inside the if statement create an ArrayList with its size being the int variable from point 1. 5) Below the ArrayList create a for loop where i < nSize. 6) Inside the for loop add all of the incoming numbers into the array list (e.g. list.add(........) ). 4) Close the for loop and use the max() method from the Collections class to output the maximum number from your list. Within the System.out.println(), obviously. 5) Add a text line to the else-statement with something like "Number must be over zero". Overall, about 7 lines of code needed. There's probably an even shorter way to do this, but I'm not that smart yet:) Good luck.
Don Fear10 уровень, Екатеринбург
11 января, 08:26
Ошибка в формулировке задания или в проверке. В задании "2. потом считывает N чисел с консоли" Нигде не сказано, что предполагается, что считываемые числа целые. Итог, если указать, что входящие чиста имеют тип double, то валидация не проходит, застревая на "Программа должна выводить число на экран."
Серёга Толочный8 уровень, Одесса
8 января, 07:06
Подскажите пожалуйста, что не так. Находит максимальное число правильно, но не проходит валидацию: "Программа должна выводить на экран максимальное из введенных N чисел. Убедись, что программа выводит максимальное число."
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int  maximum = Integer.parseInt(reader.readLine());

        for (int i = 0; i < maximum-1; i++) {
            int num = Integer.parseInt(reader.readLine());
            if (maximum <= num)
                maximum = num;
        }
        System.out.println(maximum);
Alexey Kozel8 уровень
9 января, 14:49
ты первое введенное число (maximum) используешь в сравнении -> (maximum<=num) а оно определяет только количество введенных чисел. поэтому его сравнивать не надо. ввел 10, значит будут сравниваться 10 следующих чисел, но не сама десятка. выведи её из сравнения.
Александр Ковалев10 уровень, Москва
11 января, 11:58
У Вас maximum изменяется в цикле... и цикл все время сравнивает i с изменяющимся maximum...
Дмитрий К.7 уровень, Москва
7 января, 21:39
Да, согласен... условия задачи не совсем точны.. проверку вводимых значений не надо делать.. это как бы в условиях задачи "вводимые данные больше 0". Решил одним циклом и одним if. Около 10 строк класса Solution.
Don Fear10 уровень, Екатеринбург
11 января, 08:27
Огромный респект, каждый раз с этим мучаюсь.
Роман8 уровень
вчера, 10:20
Мне кажется специально так условия сформулированы. Чтобы нас, новичков, ловить на этом! Во-первых, в условиях задачи не написано максимум из какого диапазона (отрицательные и положительные целые). Во-вторых, входные данные только положительные. В-третьих, в самом коде уже добавлена строка "int maximum = ;", и её вывод на экран в конце программы. Судя по комментариям, много кто попался на эту уловку. "это онлайн-курс обучения программированию на Java, который на 80% состоит из практики". Что сказать? Молодцы!
Artur16 уровень
23 декабря 2018, 16:13
Мудрить с массивами особо смысла нет, тем более, что походу курса о них еще не говорили. Алгоритм: 1.Считываем первое число N в консоли, это будет количество чисел, среди которых будем искать максимум. 2.Т.к. по условию N > 0, значит минимально возможное кол-во чисел для сравнения - 1. Значит мы можем принять первое введенное число за максимум, это мы делаем до цикла. 3. Создаём цикл for, будем его запускать N-1 раз(т.к. 1 число из списка сравнения мы уже ввели на шаге 2), вводить в консоль число и сравнивать его с текущим максимумом. Если введенное число больше, то делаем его максимумом соответственно.
Loner GO9 уровень, Киев
20 декабря 2018, 00:42
Сделал вот так - валидатор решил не принимать
int maximum = Integer.parseInt(reader.readLine());
Задал максимуму минимальное возможное значение int - прошел проверку.
Mikhail Borisov16 уровень, Санкт-Петербург
15 декабря 2018, 02:24
if (k>maximum || i==0) {
    maximum=k;
}
За первое значение берем первый элемент и не нужно городить костыли в виде минимально возможного значения int
Artem29 уровень
14 декабря 2018, 14:27
Для int минимальное значение можно присвоить как int i = Integer.MIN_VALUE; Меньше нет. Ну а потом в цикле просто сравнивать новое число с предыдущим, и если оно больше его и сохраняем в переменную
I_Am_Groot8 уровень, Москва
22 ноября 2018, 00:00
Для тех, кто будет писать через цикл for. На всякий случай напомню последовательность его выполнения. Выполняется условие => начинает выполнятся тело цикла => и только после этого происходит вычисление шага. Пример: Если в таком цикле - for (int i=0; i<n; i++) Вам понадобится выделить число, которое идет первым, то это число будет при i=0, а не i=1. Из-за этого вы можете как и я просидеть пару часов над вроде бы логически верно решенной задачей, честно и пошагово проверять числа и не понимать почему у вас получается неверное решение. Ибо я считал что сначала происходит сравнение 0<n, при i=0, далее увеличение шага на единицу, и только потом выполнение команд внутри цикла. Это неверно. Надеюсь это будет полезным.