打表技巧——买苹果

与其明天开始,不如现在行动!


买苹果

1.1 题目描述

小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量
1)能装下6个苹果的袋子
2)能装下8个苹果的袋子
小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要求自己使用的袋子数量必须最少,且使用的每个袋子必须装满。给定一个正整数N,返回至少使用多少袋子。如果N无法让使用的每个袋子必须装满,返回-1

1.2 解决思路

  1. 这个问题,输入类型简单,就是需要买的苹果;返回类型也简单,就是使用袋子数量
  2. 先用暴力方法打表,看看有什么规律
  3. 再根据找出的规律优化code
1.3 代码实现

暴力求解,打表

public class AppleMinBags {
    private static int minBags(int apple) {
        if (apple <= 0) {
            return 0;
        }
        int bag6 = -1;
        int bag8 = apple / 8;
        int rest = apple % 8;
        while (rest % 6 != 0) {
            bag8--;
            rest += 8;
            if (bag8 == -1) {
                return -1;
            }
        }
        bag6 = rest / 6;
        return bag6 == -1 ? -1 : bag8 + bag6;

    }

    public static void main(String[] args) {
        for (int apple = 1; apple <= 100; apple++) {
            System.out.println(apple + ":" + minBags(apple));
        }
    }
}

找到规律:

苹果数量是奇数,那么返回-1

如果苹果数小于17,那么在数量等于6或8时候要一个袋子,等于12,14,16的时候需要两个袋子

如果数量大于17,,每多八个苹果,袋子数量就会加一且都是隔一个才需要袋子

优化后的code

public class AppleMinBags {
    public static int minBagsAwesome(int apple) {
        if ((apple & 1) != 0) {
            return -1;
        }
        if (apple < 17) {
            return (apple == 6 || apple == 8) ? 1 :
                    (apple == 12 || apple == 14 || apple == 16) ? 2 :
                            -1;
        }
        return (apple - 18) / 8 + 3;
    }

    public static void main(String[] args) {
        int N = 50;
        System.out.println(minBagsAwesome(N));
    }
}

💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱生姜不吃醋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值