与其明天开始,不如现在行动!
文章目录
- 买苹果
- 1.1 题目描述
- 1.2 解决思路
- 1.3 代码实现
- 💎总结
买苹果
1.1 题目描述
小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量
1)能装下6个苹果的袋子
2)能装下8个苹果的袋子
小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要求自己使用的袋子数量必须最少,且使用的每个袋子必须装满。给定一个正整数N,返回至少使用多少袋子。如果N无法让使用的每个袋子必须装满,返回-1
1.2 解决思路
- 这个问题,输入类型简单,就是需要买的苹果;返回类型也简单,就是使用袋子数量
- 先用暴力方法打表,看看有什么规律
- 再根据找出的规律优化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));}
}
💎总结
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!