版权声明:禁止侵权,打击盗版! https://blog.csdn.net/ChenGX1996/article/details/82944857
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。
import java.util.*;
public class Main {
public static int getNum(int n){
int temp = -1;
//要想使得购买尽量少的塑料袋,则金量购买8个每袋的
//可以构建一个循环,从最大可选择的8个每袋的种类开始,一直到0
//如果计算结果刚好等于n,则退出循环
for(int i = n/8;i>=0;i--){//i表示8个每袋的数量,依次递减
//不是8个每袋的数量若是6的整数倍,则满足
if((n-i*8)%6 == 0){
//满足时计算总的袋子数,直接退出
temp = i+(n-i*8)/6;
return temp;
}
}
return temp;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.close();
System.out.print(getNum(n));
}
}
时间复杂度:O(n)
空间复杂度:O(1)