Самый большой из пяти - PullRequest
0 голосов
/ 22 сентября 2018

У меня проблема с одной простой задачей:

"Напишите программу, которая находит наибольшее из 5 чисел, считываемых из консоли, используя только 5 операторов if:"

Ввод:

В первых 5 строках вы получите 5 чисел, каждое в отдельной строке

Выход:

В единственной выходной строке запишите наибольшее из 5 чисел

Ограничения:

5 чисел всегда будут действительными с плавающей запятой.номера точек в диапазоне [-200, 200]

ограничение по времени: 0,1 с

ограничение памяти: 16 МБ

Мое решение:

if (
            firstNum < -200 && firstNum > 200 ||
                    secondNum < -200 && secondNum > 200 ||
                    thirdNum < -200 && thirdNum > 200 ||
                    forthNum < -200 && forthNum > 200 ||
                    fifthNum < -200 && fifthNum > 200) {
        System.out.println("Invalid Number");
    } else {
        double max = Math.max(firstNum, Math.max(secondNum, Math.max(thirdNum, Math.max(forthNum, fifthNum))));
        if (max == (int) max) {
        System.out.println((int) max);
        }
        else {
            System.out.println(max);
        }

    }
}

}

Эта работа правильная, но проблемы в срок:

Контрольный пример № 1: TLE[> 0,100 с, 41,15 МБ] (0/0)

* Превышен лимит времени

С уважением НМ

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Инициализируйте максимум до некоторого небольшого значения (все, что ниже -200 подойдет).Затем, когда вы читаете числа по одному, проверьте только что прочитанное число, превышает ли оно максимальное значение на данный момент, и установите максимальное значение для него, если оно есть.Прочитав 5 цифр, выведите максимум.Это можно сделать в хорошем цикле, нет необходимости хранить пять чисел в отдельных переменных.

0 голосов
/ 22 сентября 2018

Если ваша проблема связана с ограничением по времени, причина не очевидна из кода, который вы разместили.Все это должно выполняться за пару миллисекунд.

Наиболее вероятное объяснение того, что вы работаете с 1/10 секунды, состоит в том, что что-то заставляет вашу JVM запускаться медленно.

  • Одна из возможностей заключается в том, что в вашем приложении есть какая-то другая "негодяйка", которая вызывает это.(Пожалуйста, покажите нам ваше полное заявление: и MCVE, на самом деле.)

  • Вторая возможность состоит в том, что у вас есть бесконечный цикл в какой-то другой части вашего кода, который вы не показываете нам;например, ваш код для чтения 5 чисел.

  • Другая возможность заключается в том, что в вашей установке Java есть что-то странное.Например, если он был установлен на удаленном сетевом ресурсе, это повлияет на время запуска JVM.


UPDATE

Я скомпилировал и запустил ваш код, и я пришел к выводу, что все зависит от времени запуска JVM.

$ time java BiggestOfFiveMaxMath01  < /tmp/in
5

real    0m0.119s
user    0m0.125s
sys 0m0.018s

Вы вряд ли сможете улучшить это, если не переписать его на языке, подобном C или C ++.который может быть скомпилирован в нативный код заранее.

0 голосов
/ 22 сентября 2018

Сохраняйте свой код простым и придерживайтесь заданных условий.

 //Init max =-201 so that it is as minimum as possible.
 double max= -201;
 if(firstNum>max){
    max=firstNum;
 }
 if(secondNum>max){
    max=secondNum;
 }
 if(thirdNum>max){
    max=thirdNum;
 }
 if(forthNum>max){
    max=forthNum;
 }
 if(fifthNum>max){
    max=fifthNum;
 }
 System.out.println(max);
...