如何将基础计算题设置成40分难度?

摘要:最近在参加一个算法比赛,遇到一道看似非常基础的计算题,但无论怎么修改代码,始终无法通过全部测试用例,目前最高只能拿到 40 分,特来求助。 一、题目描述 输入两个浮点数: 半径 r高度 h 要求输出以下五个结果(均保留两位小数): 圆周长
最近在参加一个算法比赛,遇到一道看似非常基础的计算题,但无论怎么修改代码,始终无法通过全部测试用例,目前最高只能拿到 40 分,特来求助。
一、题目描述 输入两个浮点数: 半径 r高度 h 要求输出以下五个结果(均保留两位小数): 圆周长 C1 = 2πr圆面积 Sa = πr²球表面积 Sb = 4πr²球体积 Va = 4/3πr³圆柱体积 Vb = πr²h 输出格式:
二、第一版代码(得分:20 分) importjava.util.*; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); doubler=sc.nextDouble(); doubleh=sc.nextDouble(); doublepi=3.14; System.out.printf("C1=%.2f%n",2.0*pi*r); System.out.printf("Sa=%.2f%n",pi*r*r); System.out.printf("Sb=%.2f%n",4.0*pi*r*r); System.out.printf("Va=%.2f%n",4.0*pi*r*r*r/3.0); System.out.printf("Vb=%.2f%n",pi*r*r*h); } } 问题:只能通过部分测试点,得分 20 分。
三、第二版代码(得分:40 分) 考虑可能是精度问题,将输出改为 BigDecimal 控制: importjava.math.BigDecimal; importjava.math.RoundingMode; importjava.util.Scanner; publicclassMain{ privatestaticStringfmt(doublex){ returnBigDecimal.valueOf(x) .setScale(2,RoundingMode.HALF_EVEN) .toPlainString(); } publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); doubler=sc.nextDouble(); doubleh=sc.nextDouble(); doublepi=3.14; doublec1=2.0*pi*r; doublesa=pi*r*r; doublesb=4.0*pi*r*r; doubleva=4.0*pi*r*r*r/3.0; doublevb=pi*r*r*h; System.out.println("C1="+fmt(c1)); System.out.println("Sa="+fmt(sa)); System.out.println("Sb="+fmt(sb)); System.out.println("Va="+fmt(va)); System.out.println("Vb="+fmt(vb)); } } 结果:得分提升到 40 分,但仍然无法通过全部测试。 我现在感觉是比赛官方的OJ系统有问题。
四、求助 希望有经验的同学或参加过类似 OJ 的同学帮忙分析。 如果有能够 AC 的代码或明确结论,非常感谢分享。
如果后续定位出问题原因,我会整理一版最终正确解法。