您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

坑爹的Java除法取整(记洛谷P5709题WA的经历,Java语言描述)

星拱北辰 发布时间:2020-01-18 13:39:35 ,浏览量:0

题目要求

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             
关注
打赏
1660750074
查看更多评论
0.0470s