找回密码
 立即注册
首页 业界区 业界 一道基础计算题卡在 40 分,求助判题规则问题 ...

一道基础计算题卡在 40 分,求助判题规则问题

矛赓宁 3 天前
最近在参加一个算法比赛,遇到一道看似非常基础的计算题,但无论怎么修改代码,始终无法通过全部测试用例,目前最高只能拿到 40 分,特来求助。

一、题目描述

输入两个浮点数:

  • 半径 r
  • 高度 h
1.webp
要求输出以下五个结果(均保留两位小数):

  • 圆周长 C1 = 2πr
  • 圆面积 Sa = πr²
  • 球表面积 Sb = 4πr²
  • 球体积 Va = 4/3πr³
  • 圆柱体积 Vb = πr²h
输出格式:
2.webp

二、第一版代码(得分:20 分)
  1. import java.util.*;
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         Scanner sc = new Scanner(System.in);
  5.         double r = sc.nextDouble();
  6.         double h = sc.nextDouble();
  7.         double pi = 3.14;
  8.         System.out.printf("C1=%.2f%n", 2.0 * pi * r);
  9.         System.out.printf("Sa=%.2f%n", pi * r * r);
  10.         System.out.printf("Sb=%.2f%n", 4.0 * pi * r * r);
  11.         System.out.printf("Va=%.2f%n", 4.0 * pi * r * r * r / 3.0);
  12.         System.out.printf("Vb=%.2f%n", pi * r * r * h);
  13.     }
  14. }
复制代码
问题:只能通过部分测试点,得分 20 分。

三、第二版代码(得分:40 分)

考虑可能是精度问题,将输出改为 BigDecimal 控制:
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. import java.util.Scanner;

  4. public class Main {
  5.     private static String fmt(double x) {
  6.         return BigDecimal.valueOf(x)
  7.                 .setScale(2, RoundingMode.HALF_EVEN)
  8.                 .toPlainString();
  9.     }

  10.     public static void main(String[] args) {
  11.         Scanner sc = new Scanner(System.in);
  12.         double r = sc.nextDouble();
  13.         double h = sc.nextDouble();
  14.         double pi = 3.14;

  15.         double c1 = 2.0 * pi * r;
  16.         double sa = pi * r * r;
  17.         double sb = 4.0 * pi * r * r;
  18.         double va = 4.0 * pi * r * r * r / 3.0;
  19.         double vb = pi * r * r * h;

  20.         System.out.println("C1=" + fmt(c1));
  21.         System.out.println("Sa=" + fmt(sa));
  22.         System.out.println("Sb=" + fmt(sb));
  23.         System.out.println("Va=" + fmt(va));
  24.         System.out.println("Vb=" + fmt(vb));
  25.     }
  26. }
复制代码
结果:得分提升到 40 分,但仍然无法通过全部测试。
我现在感觉是比赛官方的OJ系统有问题。

四、求助

希望有经验的同学或参加过类似 OJ 的同学帮忙分析。
如果有能够 AC 的代码或明确结论,非常感谢分享。

如果后续定位出问题原因,我会整理一版最终正确解法。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册