✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
1. 题目描述
商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index],每种商品的价格在每天是item_price[item_index][day]
,通过对商品的买进和卖出获取利润,请给出商人在days天内能获取到的最大利润。
注:同一件商品可以反复买进和卖出;
2. 输入描述
3 //输入商品的数量 number
3 // 输入商人售货天数 days
4 5 6 //输入仓库限制每件商品的最大持有数量是itemlindex]
1 2 3 // 输入第一件商品每天的价格
4 3 2 // 输入第二件商品每天的价格
1 5 3 // 输入第三件商品每天的价格
3. 输出描述
32//输出商人在这段时间内的最大利润
4. Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String number = sc.nextLine();
int num = Integer.parseInt(number);
String str = sc.nextLine();
String[] arrs = str.split(" ");
int[] arr = new int[arrs.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(arrs[i]);
}
int sum = 0;
for (int i = 0; i < num; i++) {
String priceArrStr = sc.nextLine();
String[] priceArr = priceArrStr.split(" ");
int max = 0;
for (int j = 1; j < priceArr.length; j++) {
int current = Integer.parseInt(priceArr[j]);
int pre = Integer.parseInt(priceArr[j-1]);
int profit = current - pre;
max += Math.max(profit, 0);
}
sum += max * arr[i];
}
System.out.println(sum);
}
5. 测试
6.解题思路
- 首先读取输入的商品数量
number
和商人售货天数days
。 - 使用
nextLine()
方法读取每件商品的最大持有数量item[index]
,并将其存储在字符串str
中。 - 使用空格分隔字符串
str
,将每件商品的最大持有数量转换为整数类型,并存储在数组arr
中。 - 初始化变量
sum
为 0,用于存储总利润。 - 使用循环从 0 到 number-1,依次处理每件商品的价格:
- 使用
nextLine()
方法读取每件商品每天的价格,将其存储在字符串数组priceArr
中。 - 初始化变量
max
为 0,用于存储当前商品的最大利润。 - 使用循环从 1 到 days-1,依次计算当前商品每天的利润:
- 将当前天的价格和前一天的价格分别转换为整数类型。
- 计算当前天和前一天的价格差值,并将其与 0 比较取较大值。
- 将计算得到的利润累加到
max
中。
- 将当前商品的最大利润乘以其最大持有数量,累加到
sum
中。
- 使用
- 输出
sum
,即为商人在给定天数内能获取到的最大利润。