一、题目描述
双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金。现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。
输入:
第一行为一维整型数组m,数组长度小于100,数组元素记录单个商品的价格,单个商品价格小于1000。
第二行为购买资金的额度r,r小于100000。
输出:输出为满足上述条件的最大花费额度。
二、输入输出示例
示例1
输入:
23,26,36,27
78
输出:
76
示例2
输入:
10,2,3,4,5,6,7,30
20
输出:
20
Java代码
package odTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class maxSpent {
static int gross;
static List<Integer> spentList = new ArrayList<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] moneyList = Arrays.stream(scanner.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
gross = Integer.parseInt(scanner.nextLine());
boolean[] hasUsed = new boolean[moneyList.length];
Arrays.fill(hasUsed, false);
judgeMaxSpent(moneyList,hasUsed,0,0);
Collections.sort(spentList);
System.out.println(spentList.get(spentList.size()-1));
}
private static void judgeMaxSpent(int[] moneyList, boolean[] hasUsed, int currentSpent, int count) {
if(currentSpent>gross) {
return;
}
if(count == 3&¤tSpent<=gross) {
spentList.add(currentSpent);
return;
}
for(int i=0;i<moneyList.length;i++) {
if(hasUsed[i]) {
continue;
}
hasUsed[i] = true;
currentSpent = currentSpent+moneyList[i];
count++;
judgeMaxSpent(moneyList,hasUsed,currentSpent,count);
currentSpent = currentSpent-moneyList[i];
hasUsed[i] = false;
count--;
}
}
}