华为OD题目0008-双十一
- 华为OD题目0008-双十一
华为OD题目0008-双十一
题目描述
双十一众多商品进行打折销售,小明想购买一些自己心仪的商品,
但由于受购买资金限制,所以他决定从众多心意商品中购买3件,
而且想尽可能的花完资金,
现在请你设计一个程序帮助小明计算尽可能花费的最大资金额。
输入描述
第一行为整型数组M,数组长度小于100,数组元素记录单个商品的价格;
单个商品价格小于1000;
第二行输入为购买资金的额度R;
R < 100000。
输出描述
输出为满足上述条件的最大花费额度
如果不存在满足上述条件的商品请返回-1
示例一
输入
23,26,36,27
78
输出
76
示例二
输入
23,30,40
26
输出
-1
直接上代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String m = sc.nextLine();
int r = sc.nextInt();
solution(m,r);
}
private static void solution(String m,int r){
String[] goodsPricesString = m.split(",");
int[] goodsPrices = new int[goodsPricesString.length];
for (int i =0;i<goodsPricesString.length;i++){
goodsPrices[i] = Integer.parseInt(goodsPricesString[i]);
}
Arrays.sort(goodsPrices);
if(goodsPrices.length < 3 || goodsPrices[0] + goodsPrices[1] + goodsPrices[2] > r){
System.out.println(-1);
return;
}
for(int i = goodsPrices.length-1;i>=0;i--){
if(goodsPrices[i] + goodsPrices[i-1] + goodsPrices[i-2] < r){
int sum = goodsPrices[i] + goodsPrices[i-1] + goodsPrices[i-2];
System.out.print(sum);
return;
}
}
}
}
跟其他代码稍微不同之处:
使用数组的sort()函数排序后,肯定是从小到大,因此采用for循环从大小进行遍历,第一个遇到最大的三个数小于经费总额时,立即将最大的三个数的sum()和输出就行,该数值就是在有限钱下,所能最大化的花完钱(买了相对最贵的三个物品)
若有疑问,欢迎沟通!