坑爹的Java除法取整(记洛谷P5709题WA的经历)

题目要求

P5709题目链接

在这里插入图片描述

分析

一看,这就是水题啊。。。
问题是,看看这AC-Rate,吓不吓人~~~
在这里插入图片描述

所以我们应该去分析这里的坑(当时我也是头铁跪了多次……)

读完题我们可能会想直接去将s/t以后得到答案对吧?
但是“完整的苹果”怎么理解?
“完整的苹果”其实是说,苹果可以吃一半,对吧?
比如说10分钟一个苹果,吃了15分钟,那就是1.5个苹果,实际消耗的是2个。假设原来有5个苹果,那就剩下3个完整的。

那就是我们可以用s/t以后取到上整~~(因为要求的是完整的苹果数,所以说剩余的是下整,对应的消耗就是上整)

上整怎么搞?
Java有 java.lang.Math类(这是我写的博客)

  • Math.ceil()是上整
  • Math.floor()是下整

我们选Math.ceil(),但返回值是double,我们需要强转为int。
然后呢,是后面痛苦的根源——s/t!!!
我忘记了int/int是直接得到int,截断取整,并没有浮点数……
难怪我改半天也不知道问题在哪里……
所以需要做一个细致的操作——将s转为double……

本题测试用例不涉及,但必须注意的一个问题是除0问题,我建议判一下t的0,如果是0就是没消耗,算是打印0吧~~

鉴于本题其实不难,上面也把坑分析了,所以直接上最终代码吧!

第N次提交——AC

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt(), t = scanner.nextInt(), s = scanner.nextInt();
        if (t == 0) {
            System.out.println(0);
            return;
        }
        int temp =  (int) Math.ceil((double)s / t);
        m -= temp;
        if (m < 0) {
            System.out.println(0);
        } else {
            System.out.println(m);
        }
        scanner.close();
    }
}

在这里插入图片描述

发布了351 篇原创文章 · 获赞 610 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104029431
今日推荐