题目
小虎去附近的商店买苹果, 奸诈的商贩使用了捆绑交易, 只提供6个每袋和8个
每袋的包装包装不可拆分。 可是小虎现在只想购买恰好n个苹果, 小虎想购买尽
量少的袋数方便携带。 如果不能购买恰好n个苹果, 小虎将不会购买。 输入一个
整数n, 表示小虎想购买的个苹果, 返回最小使用多少袋子。 如果无论如何都不
能正好装下, 返回-1。
实现
package com.jpg.coding;
/*
* 因为只有8个类型和6个类型的袋子,所以只有当苹果的个数是偶数个的时候,才能将所有的苹果的都装下
* 如果苹果的个数是奇数,直接返回即可
*
* 先判断只使用8个类型的袋子能否全部装下,如果装不下,剩下的苹果个数是rest
* 判断这rest个苹果能否用6个类型的袋子装下,如果不能,就少使用一个8个类型的袋子
* 这样剩余的苹果个数就是rest = rest + 8,再判断这rest个苹果能否用6个类型的袋子装下
* 如果不能,则重复上述的步骤
* 到什么时候停止呢?
* 当rest个苹果能够被6个类型的袋子全部装下的时候,就ok了
*
* 针对上述的优化:
* 如果rest的值大于了6和8的最小公倍数的时候,也就是rest > 24的时候
* 此时,无论如何,苹果都不能装下
* 第一:当rest > 24的时候,此时rest - 24肯定在之前的结果中出现过
* 因为24是8的倍数,既然在之前rest = rest - 24的时候不满足,那么此时也不满足
* 第二:当rest > 24的时候,24可以用3个8个类型的袋子搞定,而不用4个6个类型的袋子搞定,所以不必到24以上
*/
public class AppleMinBags {
public static int minBags(int apple) {
if (apple < 0) {
return -1