最大花费金额

难度:★

直接暴力三重for循环

最大花费金额

知识点数组

时间限制:1s 空间限制:32MB 限定语言:不限

题目描述:

双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金,现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。

输入描述:

输入第一行为一维整型数组M,数组长度小于100,数组元素记录单个商品的价格,单个商品价格小于1000。

输入第二行为购买资金的额度R,R小于100000。

输出描述:

输出为满足上述条件的最大花费额度。

注意:如果不存在满足上述条件的商品,请返回-1。

补充说明:

输入格式是正确的,无需考虑格式错误的情况。

示例1

输入:

23,26,36,27

78

输出:

76

说明:

金额23、26和27相加得到76,而且最接近且小于输入金额78

示例2

输入:

23,30,40

26

输出:

-1

说明:

因为输入的商品,无法组合出来满足三件之和小于26.故返回-1

解题思路:

遍历所有可能的商品组合,计算价格之和并比较与购买资金额度的差值,从而找到满足条件的最大花费额度。

JAVA代码:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String[] str = scan.nextLine().split(",");  // 输入商品价格数组
        int money = scan.nextInt();  // 输入购买资金额度
        scan.close();
        int nums[] = new int[str.length];
        for (int i = 0; i < str.length; i++) {
            nums[i] = Integer.parseInt(str[i]);
        }
        int res = money;  // 记录最大花费额度的初始值为购买资金额度
        for (int i = 0; i < str.length - 2; i++) {  // 遍历商品价格数组,选择三种商品的组合
            if (nums[i] >= money) {
                continue;  // 如果当前商品价格大于等于购买资金额度,跳过当前循环
            }
            for (int j = i + 1; j < str.length - 1; j++) {
                int temp1 = nums[i] + nums[j];  // 计算前两种商品价格之和
                if (temp1 >= money) {
                    continue;  // 如果前两种商品价格之和大于等于购买资金额度,跳过当前循环
                }
                for (int k = j + 1; k < str.length; k++) {
                    int temp2 = temp1 + nums[k];  // 计算三种商品价格之和
                    if (temp2 > money) {
                        continue;  // 如果三种商品价格之和大于购买资金额度,跳过当前循环
                    }
                    res = Math.min(res, money - temp2);  // 更新最大花费额度
                }
            }
        }
        if (res == money) {
            System.out.println(-1);  // 如果无法满足条件的商品组合,输出-1
        } else {
            System.out.println(money - res);  // 输出满足条件的最大花费额度
        }
    }

代码说明:

代码思路和实现说明如下:

  • 从输入中获取商品价格数组和购买资金额度。
  • 将商品价格数组转换为整数数组。
  • 初始化最大花费额度res为购买资金额度。
  • 使用三重循环遍历商品价格数组,选择三种商品的组合。
  • 如果当前商品价格大于等于购买资金额度,则跳过当前循环。
  • 计算三种商品价格之和,并与购买资金额度进行比较。
  • 如果三种商品价格之和大于购买资金额度,则跳过当前循环。
  • 更新最大花费额度res,取购买资金额度与三种商品价格之和的差的最小值。
  • 判断是否存在满足条件的商品组合。
  • 如果不存在满足条件的商品组合,输出-1。
  • 如果存在满足条件的商品组合,输出满足条件的最大花费额度。