版权声明:欢迎转载,若转载请给出本文链接 https://blog.csdn.net/niaonao/article/details/84206451
这里是第一个问题, 较为简单, 最大种类问题. 要求拿一定数量的钱去买最多种类的物品, 且所买商品不能重复.
题目
小明的女朋友最喜欢在网上买买买了,可是钱包里钞票有限,不能想买啥就买啥。
面对琳琅满目的物品,她想买尽可能多的种类,每种只买一件,同时总价格还不能超过预算上限。
于是她请小明写程序帮她找出应该买哪些物品,并算出这些物品的总价格。
.
输入规范:
每个输入包含两行。第一行是预算上限。
第二行是用空格分隔的一组数字,代表每种物品的价格。
所有数字都为正整数并且不会超过10000。
.
输出规范:
对每个输入,输出应买物品的总价格。
.
输入示例1:
100
50 50
输出示例1:
100
输入示例2:
188
50 42 9 15 105 63 14 30
输出示例2:
160
代码
重点在于, 要求尽可能多的种类,每种只买一件,同时总价格还不能超过预算上限.
这个问题偏易, 关于分析写在了代码的注释. 这里只是简单解出了答案, 还没有做的很严谨; 包括时间复杂度, 空间复杂度并没有考虑进来, 如果有更好的答案请分享一下 ^ _ ^ .
import java.util.Arrays;
import java.util.Scanner;
/**
* @Description :最多商品种类问题
* @Author: niaonao
*/
public class GoodsPurchase {
/**
* 尽可能买多种类,每种一件
* 所以买其中价格最低的且保证种类最多。
* @param args
*/
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
Scanner cin = new Scanner(System.in);
//最大预算上限
int limitMoney = sc.nextInt();
//多种商品价格,存在不同的物品价格相同,50,50
String numsStr[] = cin.nextLine().split("\\s");
int goodsPrice[] = new int[numsStr.length];
for (int i = 0; i < goodsPrice.length; i++) {
goodsPrice[i] = Integer.parseInt(numsStr[i]);
}
//花费总金额
int monry = mostGoodsWithinLimit(limitMoney, goodsPrice);
System.out.println(monry);
}
/**
* 计算不超出限额的情况下
* 购买最多种类商品的总价格
* (每种商品购买一个)
* @param limitMoney
* @param goodsPrice
*/
private static int mostGoodsWithinLimit(int limitMoney, int[] goodsPrice) {
//初始化购买物品总价格为0
int allPrice = 0;
//从小到大排序
Arrays.sort(goodsPrice);
//关键算法
for (int i = 0; i < goodsPrice.length; i++) {
int price = goodsPrice[i];
allPrice = allPrice + price;
if (allPrice > limitMoney) {
allPrice -= price;
}
}
return allPrice;
}
}
互动一下
什么你说上面的问题太简单, 下面再问你个简单的问题.
说
给你两个不规则容器, 已知容器的容量分别是3L 和5L, 请你在一个打开的水龙头处, 获取4L 的水. 注意, 这里的容器没有刻度, 不存在第三个容器.