一:买苹果

这篇博客讨论了小虎如何在只能购买6个或8个一组的苹果中,找到购买恰好n个苹果所需的最少袋数。如果无法刚好买到n个,结果返回-1。
摘要由CSDN通过智能技术生成

题目

小虎去附近的商店买苹果, 奸诈的商贩使用了捆绑交易, 只提供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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值