• ,

package com.javarush.test.level05.lesson12.bonus03;

package com.javarush.test.level05.lesson12.bonus03;

import sun.text.bidi.BidiBase;

import java.io.*;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int maximum = 0;
int[] massive;
int max = Integer.parseInt(reader.readLine());
if (max > 0)
{
massive = new int[max];
}
else
{
return;
}
int z = massive.length;
for (int i = 0; i < z; i++) {
massive[i] = Integer.parseInt(reader.readLine());
if(massive[i] > max) {
maximum = massive[i];
}
}

System.out.println(maximum);
}
}

На моём компе решается… а тестирование не проходит… почему?

18 комментариев

shcho_isle
  • shcho_isle
  • 0
  • Комментарий отредактирован 2016-12-23 13:10:08 пользователем shcho_isle
А если ты ввел числа 4 (N), 3, 2, 2, 1 — то какой результат?

Т.е. самое первое число, N, не должно участвовать в сравнении.
vampirit
else
{
return;

вот этот кусок мне непонятен. Что вы возвращаете и куда?
Himeg
В своем коде вы находите не максимум из введенных N чисел, а последнее введенное число из всех введенных чисел, которые больше, чем N.
SergeyAP
  • SergeyAP
  • 0
  • Комментарий отредактирован 2016-12-25 02:40:20 пользователем SergeyAP
Что-то я тоже стопорнул ;(
Вот код — работает правильно, но не проходит валидацию… куда копнуть?
<code>package com.javarush.test.level05.lesson12.bonus03;

import java.io.*;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        int a = Integer.parseInt(reader.readLine());
        int maximum = 0;
        if (n > 0) {
        for (int i = 0; i < n-1; i++)
        {
            int b = Integer.parseInt(reader.readLine());
            maximum = a > b ? a : b;
        }

        System.out.println(maximum);
        }
    }
}
</code>
hammer
А зачем проверять, что n>0? N>0 по условию задачи.
Программа отработает некорректно при N=1.
Himeg
Проверь для N=3 и трёх чисел 0 1000 0 ))
SergeyAP
Спасибо. Понял…
SaLiK
Предложу еще один вариант решения задачи.
Использовать список для хранения чисел и не изобретая велосипед воспользоваться Collections.sort для сортировки. Потом взять первый или последний элемент списка. Зависит от способа сортировки.
SergeyAP
  • SergeyAP
  • 0
  • Комментарий отредактирован 2016-12-26 12:36:36 пользователем SergeyAP
Коллекции конечно же здорово (там уже куча методов готовых решить эти задачи), но, я так понял, что задачи необходимо решать в рамках пройденных лекций… ну можно чуть-чуть забежать вперед… или все-таки как можешь?
— Вопрос отпал сам-собой. Сейчас воткнул Arrays.sort и задание сразу приняли…
SaLiK
Вначале я тоже мучил алгоритмы сортировки. Но потом в одном задании решил не изобретать велосипед и использовать Collections.sort. Задача принялась. С тех пор, если задача получается громоздкая, то ищу готовые библиотеки и методы.
AviatorDed
  • AviatorDed
  • 0
  • Комментарий отредактирован 2017-01-18 03:50:56 пользователем AviatorDed
Пачему не проходит такой вариант?
<code>
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int maximum = 0;
        int n = Integer.parseInt(reader.readLine());
        for (int i = 0; i < n; i++)
        {
            int m = Integer.parseInt(reader.readLine());
            if (maximum < m)
                maximum = m;
        }
        System.out.println(maximum);
    }
}
</code>
Подскажите, пжлст, где ошибка?
AlexAV
maximum = 0, а вводимые числа могут быть все меньше 0
rinat_alekeevich
Решал таким же образом + проверка на N>0 вначале — не проходила. Прошла после того как использовал массив, куда заносил все значения. Правда были еще блоки try-catch для того чтобы программа не останавливалась экстренно.
AlexAV
У меня без массива, просто беру за начальный максимум первое вводимое значение
AviatorDed
И таки да! Спасибо AlexAV!
Dididid
  • Dididid
  • 0
  • Комментарий отредактирован 2017-02-01 16:10:47 пользователем Dididid
Работает корректно, но не принимает. В чем проблема?

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
int n = Integer.parseInt(s);
if (n>0)
{
int[] a = new int[n];
int maximum = 0;

for (int i = 0; i < n; i++){
a[i] = Integer.parseInt(reader.readLine());
if (maximum <= a[i])
maximum = a[i];}

System.out.println(maximum);
}
}
}
Kiruha
Попробуй вводить в массив отрицательные значения: -1, -23…
В начале цикла, присвой максимуму первый элемент массива.
Да и в целом, можно без массива обойтись.
Dididid
Спасибо за ответ!
Переделал еще вчера без массива. Понял что проблема в значении максимума.

Остался один вопрос: где можно найти и почитать про Integer.MIN_VALUE.и подобные ему.(Этот вариант тоже нашел на форуме...) В своем варианте я сам присваивал большое отрицательное значение первому максимуму…

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String s = reader.readLine();
int n = Integer.parseInt(s);
if (n>0)
{
int maximum=Integer.MIN_VALUE;
for (int i = 0; i < n; i++)
{
int a = Integer.parseInt(reader.readLine());
if (maximum <= a)
maximum = a;
}
System.out.println(maximum);
}
}
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.