华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
某公司目前推出了AI开发者套件、AI加速卡、AI加速模块、AI服务器、智能边缘多种硬件产品,每种产品包含若干个型号。
现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。
假设当前库存有N种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不存在价格相同的产品型号)。
请为合作厂商列出所有可能的产品组合。
输入包含采购金额amount和产品价格列表price。
第一行为amount,第二行为price。
例如:
500
[100, 200, 300, 500]
输出为组合列表。
例如:
[[500], [200, 300], [100, 200, 200], [100, 100, 300], [100, 100, 100, 200], [100, 100, 100, 100, 100]]
// 所有可能的产品组合
static List<List<Integer>> pricesList = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 采购金额amount
int amount = Integer.valueOf(sc.nextLine());
// 产品价格列表price
String price = sc.nextLine();
// [100, 200, 300, 400]
int[] priceArr = Arrays.stream(price.substring(1, price.length() - 1).split(",")).map(o->o.trim()).mapToInt(Integer::parseInt).toArray();
getGroupPrice(priceArr, 0, amount, new ArrayList<>());
System.out.print("[");
for (int i = 0; i < pricesList.size(); i++) {
List<Integer> subcur = pricesList.get(i);
System.out.print("[");
for (int j = 0; j < subcur.size(); j++) {
System.out.print(subcur.get(j));
if (j != subcur.size() - 1) {
System.out.print(", ");
}
}
System.out.print("]");
if (i != pricesList.size() - 1) {
System.out.print(", ");
}
}
System.out.print("]");
}
/**
*
* @param priceArr 产品价格列表price
* @param index
* @param remainMount 剩余采购金额
* @param priceList 满足条件的产品价格列表集合
*/
public static void getGroupPrice(int[] priceArr, int index, int remainMount, List<Integer> priceList) {
if (remainMount < 0) {
return;
}
// 如果刚好花完
if (remainMount == 0) {
List<Integer> tempList = new ArrayList<>();
tempList.addAll(priceList);
pricesList.add(tempList);
return;
}
// 如果还有采购金额
for (int i = index; i < priceArr.length; i++) {
priceList.add(priceArr[i]);
getGroupPrice(priceArr, i, remainMount - priceArr[i], priceList);
priceList.remove(priceList.size() - 1);
}
}
500
[100, 200, 300, 500, 500]
[[100, 100, 100, 100, 100], [100, 100, 100, 200], [100, 100, 300], [100, 200, 200], [200, 300], [500], [500]]
题目很简单,就是你有500块钱,随便采购,看一共能采购多少种组合的硬件产品。
下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。