每日一题07

题目描述:链接:https://www.nowcoder.com/questionTerminal/61cfbb2e62104bc8aa3da5d44d38a6ef
来源:牛客网
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

解题思路:对数字特征进行分析:首先,6和8都是偶数,因此,能凑出的个数也一定是偶数。程序中若苹果总数是奇数,可以直接返回-1。再次,偶数个苹果对8取模,其结果只可能为0,2,4,6.若余数为6或者0,则可以直接用6包装情况处理,不需要回溯购买8包装的情况,若余数为4,只需要回溯一次,因为8+4=12,12%6=0.若余数为2,只需要回溯2次,因为8+8+2=18,18%6=0,综上,可以采用如下思路进行处理。情况1:若num不是偶数,则直接返回-1,情况2:若num%8==0,则返回num/8,情况3:若num%8!=0,则只需要回溯1次或者2次包装8包装购买个数,就可以求解。回溯一次,其结果为n/8-1+2=n/8+1;回溯2次,其结果为n/8+3-2=n/8+1。

示例代码:

private static int buyApple(int n){
        //先将小于等于十个的情况都做了处理
        if(n%2!=0||n<6||n==10){
            return -1;
        }
        if(n%8==0){
            return n/8;
        }
        return n/8+1;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println(buyApple(sc.nextInt()));
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值