欢迎光临
我们一直在努力

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

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


一、题目描述

输入两个浮点数:

  • 半径 r

  • 高度 h

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

  • 圆周长 C1 = 2πr

  • 圆面积 Sa = πr²

  • 球表面积 Sb = 4πr²

  • 球体积 Va = 4/3πr³

  • 圆柱体积 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 的代码或明确结论,非常感谢分享。


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

    赞(0)
    未经允许不得转载:171主机测评 » 一道基础计算题卡在 40 分,求助判题规则问题
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址