题目:
小明的女朋友最喜欢在网上买东西,可是钱包里的钞票有限,不能想买啥就买啥。面对琳琅满目的物品,她想买尽可能多的种类,每种只买一件,同时价格不能超过上限。于是 她请小明写程序帮她找出应该买哪些物品,并算出这些物品的总价格。
输入规范:
每个输入包含两行。第一行是预算上限,第二行是用空格分隔的一组数字,代表每种物品的价格,所有的数字都为正整数并且不会超过10000。
输出规范:
对每个输入,输出应买物品的总价格。
输入示例1:
100
50 50
输出示例1:
100
输入示例2:
188
50 42 9 15 105 63 14 30
输出示例:
160
解题思路:首先商品的种类不是固定的(可以输入若干商品价格),我采用集合ArrayList来存放商品价格,然后进行从小到大排序,遍历该集合,
如果当前拥有的钱 total 大于该物品价格price,则说明可以购买,
当前的钱减去该商品 价格total = total-price,
总价增加 sum+= price,若当前拥有的钱,小于price,则说明无法购买,跳出循环,打印总价sum。
代码如下:
package com.xuanqi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] arges) {
Scanner sc1 = new Scanner(System.in); //输入月份和日期
Scanner sc2 = new Scanner(System.in); //输入 大写字母字符串
//接受输入参数
String m = sc1.nextLine();
String n = sc2.nextLine();
List<Integer> prices = new ArrayList<>();
String temp[] = n.split("\\s+");
for (String s : temp) {
Integer price = Integer.parseInt(s);
if (price != null && price <= 10000 && price > -1) {//判断输入的是否为数字
prices.add(price);
}
}
Collections.sort(prices); //将输入的价格进行排序
Integer total = Integer.parseInt(m); //获取输入的预算上限
Integer sum = 0;
/**
* 遍历价格集合,prices是有序的集合,从小到大排列
* total 为当前拥有的钱,如果total >= price ,说明可以买此商品,
* 则total = total - price;
* 此时,计算总价 sum += price
* 直到total < price 说明当前拥有的钱不够支付下一个商品,则跳出循环 打印sum总价;
*/
for (Integer price : prices) {
if (total >= price) {
total = total - price;
sum += price;
}else{
break;
}
}
System.out.println(sum);
}
}