解题思路:
简单的分情况讨论题目,由于最多只会重新计算一次分数,甚至不需要使用递归。
但正常情况下,我们一般会先从大于90的情况依次往下判断,但为了提高性能,我们可以这样处理。
根据题目可知,当x<60时,会进行一次开方乘十的运算,然后用运算结果重新进行一次计算,那么我们不如直接进行一次是否小于60的判断,判断完了,如果小于60,就进行sqrt(x),然后再进行是否大于等于90的判断。判断完成后再判断是否大于等于60。
这样说起来感觉很绕,直接上代码。
代码实现:
import java.util.Scanner;
import static java.lang.Math.sqrt;
public class p8823 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double score = sc.nextFloat();
double answer = compute(score);
String str = String.format("%.1f",answer); //用于格式化输出小数点后1位。
double result = Double.parseDouble(str);
System.out.println(result);
}
//用来判断的方法
public static double compute(double score){
double result = 0;
if(score<60){ //先判断是不是小于60。
score=(int)sqrt(score)*10;
} //如果score<60,将计算过的score传回来。
if(score>=90){ //判断完成,用score进行接下来的判断。如果
score>=90,result=4.0;
result = 4;
}
else if(score>=60){
result = 4-(90-score)/10; //如果score>=60,result=(4-(90-score)/10);
}
return result; //如果score还是小于60,不修改result的默认值0;
}
}