题目描述:链接: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()));
}