華為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()和輸出就行,該數值就是在有限錢下,所能最大化的花完錢(買了相對最貴的三個物品)
若有疑問,歡迎溝通!