【华为OD题库-108】水果摊小买卖-java

题目

小王手里有点闲钱,想着做点卖水果的小买卖。给出两个数组m、n,用m[i]代表第i个水果的成本价,n[i]代表第i水果能卖出的价钱,假如现在有本钱k,试问最后最多能赚多少钱?
说明:

1 每种水果只需买一次,只能卖---次

2 数组m、n大小不超过50

3 数组元素为正整数,不超过1000
输入描述:

1 数组m、n

2 本钱k

备注:

1 首行输入逗号分隔的数组m的元素值

2 第二行输入逗号分隔的数组n的元素值

3 第三行输入本钱
输出描述:

最多能赚取多少钱。
示例1
输入

4,2,6,4

5,3,8,7

15
输出

22

思路

这道题歧义太大了,只有结合示例数据再反向推导题意

  1. 根据题意理解:

按照题目原本的描述,每种水果只能买一次、卖一次,那一次可以买多个吧?以示例数据为例,明显第4种水果利润更高,购买方案可以是:

买3个第四类水果,花了12元,还剩3元;卖出后可以赚3*(7-4)=9元,卖出后拥有24元钱

再买12个第二类水果,卖出后可以赚12*(3-2)=12元,卖出后拥有36元钱

再买6个第三类水果,卖出后可以赚6*(8-6)=12元,卖出后拥有48元钱

最后买12个第一类水果,卖出后可以赚12元,卖出后拥有60元钱

所以最多能赚的前为:60-15=45。

这种理解最贴合原来的题意,但是明显和示例1数据不合。

  1. 根据示例数据反推

拥有15元,先买第一类水果(将题目限定为只能买一个水果)后卖出,赚1块,得到16块

再买第二类水果后卖出,赚1块,得到17块

再买第三类水果后卖出,赚2块,得到19块

最后买第四类水果后卖出,赚3块,得到22块

所以最后输出了22(完全不考虑原来15元的成本啊)

按照这这种理解,把每个能赚到的钱都赚到就能得到最高的利润。不能赚的钱是:当前拥有的钱买不起成本价,即不能进货。所以应该优先买成本低利润大的水果,卖出后会使当前的钱增多,下轮进货时就可能买得起当初进不了的货了。

题解

java 复制代码
package hwod;

import java.util.*;

public class BuyFruit {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int[] m = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        int[] n = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        int k = sc.nextInt();
        System.out.println(buyFruit(m, n, k));
    }

    private static int buyFruit(int[] m, int[] n, int k) {
        //第一个数代表成本价,第二个数代表售价
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < m.length; i++) {
            if (n[i] > m[i]) {
                //只存有利润的水果
                list.add(new int[]{m[i], n[i]});
            }
        }
        list.sort((o1, o2) -> {
            if(o1[0]!=o2[0]) return o1[0] - o2[0];
            return o2[1] - o1[1];
        });
        for (int i = 0; i < list.size(); i++) {
            if (k >= list.get(i)[0]) {
                k += list.get(i)[1] - list.get(i)[0];
            }
        }
        return k;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

说明

本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

相关推荐
Otaku love travel9 分钟前
老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
java·tomcat·初始化·动态数据源
DKPT23 分钟前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
L_autinue_Star38 分钟前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
晨岳1 小时前
CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
java·redis·mysql·nginx·centos·tomcat
执笔诉情殇〆1 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
YuTaoShao1 小时前
【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵
java·算法·leetcode·链表
程序员的世界你不懂1 小时前
(20)Java+Playwright自动化测试- 操作鼠标拖拽 - 上篇
java·python·计算机外设
AI360labs_atyun2 小时前
Java在AI时代的演进与应用:一个务实的视角
java·开发语言·人工智能·科技·学习·ai
不像程序员的程序媛2 小时前
redis的一些疑问
java·redis·mybatis
知其然亦知其所以然3 小时前
Java 面试高频题:GC 到底回收了什么、怎么回收、啥时候回收?
java·后端·面试