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

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


一、题目描述

输入两个浮点数:

  • 半径 r
  • 高度 h

要求输出以下五个结果(均保留两位小数):

  1. 圆周长 C1 = 2πr
  2. 圆面积 Sa = πr²
  3. 球表面积 Sb = 4πr²
  4. 球体积 Va = 4/3πr³
  5. 圆柱体积 Vb = πr²h

输出格式:


二、第一版代码(得分:20 分)

复制代码
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double r = sc.nextDouble();
        double h = sc.nextDouble();
        double pi = 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 控制:

复制代码
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

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

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

        double c1 = 2.0 * pi * r;
        double sa = pi * r * r;
        double sb = 4.0 * pi * r * r;
        double va = 4.0 * pi * r * r * r / 3.0;
        double vb = 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 的代码或明确结论,非常感谢分享。


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

相关推荐
代码AI弗森2 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
Old Uncle Tom3 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆3 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
小小小米粒3 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
生信碱移3 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业3 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
摇滚侠3 小时前
expdp 查看帮助
java·数据库·oracle
:1214 小时前
java基础
java·开发语言
曹牧5 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
daixin88485 小时前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor