最大的五个

时间:2018-09-22 07:07:21

标签: java if-statement conditional

我有一个简单的任务有问题:

  

“编写一个程序,该程序查找仅从5个if语句读取的从控制台读取的5个数字中的最大数字:”

     

输入:

     

在前5行中,您将收到5个数字,每个数字在   分隔线

     

输出:

     

在唯一的输出行上,写下5个数字中的最大数字

     

约束:

     

这5个数字将始终是该范围内的有效浮点数   [-200,200]

     

时间限制: 0.1秒

     

内存限制: 16MB

我的解决方法是:

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.100s,41.15 MB](0/0)

*已超过时间限制

问候 N.M。

3 个答案:

答案 0 :(得分:2)

使您的代码简单并遵守给定条件。

 //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);

答案 1 :(得分:0)

到目前为止,将最大值初始化为一个较小的值(低于-200的任何值都可以)。然后,当您逐一读取数字时,请检查刚刚读取的数字是否大于当前的最大值,如果已设置,请设置当前的最大值。读取5个数字后,输出到目前为止的最大值。 可以在一个不错的循环中完成此操作,无需将这五个数字存储在单独的变量中。

答案 2 :(得分:0)

如果您的问题是时间限制,则从您发布的代码中看不出原因。所有这些都应该在几毫秒内执行。

最有可能造成您进入秒限1/10的原因是导致JVM缓慢启动的原因。

  • 一种可能性是应用程序中存在其他导致此问题的“原因”。 (实际上,请向我们展示您的完整申请:和MCVE。)

  • 第二种可能性是您的代码的其他部分存在无限循环,您没有向我们展示。例如您的代码以读取5个数字。

  • 另一种可能性是您的Java安装有些奇怪。例如,如果将它安装在远程网络共享上,那么这将影响JVM的启动时间。


更新

我编译并运行了代码,得出的结论是这完全取决于JVM的启动时间。

$ time java BiggestOfFiveMaxMath01  < /tmp/in
5

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

除非您用C或C ++之类的语言将其重写为可提前编译为本机代码的语言,否则您不可能对此进行改进。