【牛客网OJ题】买苹果

    xiaoxiao2022-07-14  170

    题目描述:

    小易去附近的商店买苹果,奸许的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。

    可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。

    如果不能购买恰好n个苹果,小易将不会购买。

    输入描述:

    输入一个整数n,表示小易想购买n(1 <n< 100)个苹果

    输出描述:

    输出一个整数表示最少需要购买的袋数,

    如果不能买恰好n个苹果则输出-1

    输入

    20

    输出

    3

    分析:

    首先, 6 8 都是偶数。因此,能凑出的个数也一定是偶数。程序中若苹果总数是奇 数,可以直接返回-1 。 再次,偶数个苹果数对 8 取模,其结果只可能为 0,2,4,6 。若余数为 6 或者 0 ,则可以直 接用6 包装情况处理,不需要回溯购买 8 包装的情况。若余数为 4 ,只需回溯 1 次即可,因为 8+4=12, 12%6 = 0。若余数为 2 ,只需回溯 2 次即可,因为 8+8+2=18, 18%6 = 0 。 综上,可以采用如下思路进行处理。(由于 数字6 8 的特征,本方法只适用于本题) 情况 1 :若 num 不是偶数,则直接返回 -1 情况 2 :若 num%8 = 0 , 则返回num/8 情况 3 :若 num%8 != 0 ,则只需回溯 1 次或者 2 8 包装购买个数,就可以求解。回溯 1 次,其 结果为n/8-1+2 = n/8+1 ;回溯 1 次,其结果为 n/8-2+3 = n/8+1 。因此,可以情况 3 下,可以返回 n/8+1 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println(buyApple(n)); } public static int buyApple(int n){ if(n<6||n==10||n%2!=0){ return -1; } if(n%8 == 0 ){ return n/8; } return n/8 + 1; } }

     

    最新回复(0)