我有一个简单的任务有问题:
“编写一个程序,该程序查找仅从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。
答案 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 ++之类的语言将其重写为可提前编译为本机代码的语言,否则您不可能对此进行改进。