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

news/2024/7/20 16:15:33 标签: 华为od, 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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。


http://www.niftyadmin.cn/n/5287432.html

相关文章

VMware安装linux系统二

1、设置光驱 1.1、编辑虚拟机设置 1.2、设置虚拟机镜像 1.3、设置好后开机 2、安装Linux系统 2.1、等待安装 2.2、开始安装 2.3、选择语言&#xff0c;我选择中文 2.4、本地化不用改 2.5、软件选择一定要选&#xff0c;否则就会是默认最小安装 2.6、我这里选择的是带GUI的&am…

HTML网站基础

一、前端开发基础 前端一共三门语言——HTML、CSS、JS&#xff08;Java Script&#xff09; HTML用于静态网页框架&#xff0c;CSS用于修饰&#xff0c;JS构成动态网页 1、HTML 对于中文网页需要使用 <meta charset"utf-8"> 声明编码&#xff0c;否则会出现…

文件句柄数设置-linux

在使用Linux时我们需要同时打开多个文件&#xff0c;来适配高并发的需求&#xff0c;这时就需要设置一下文件句柄数了&#xff0c;默认打开的是1024 文件句柄&#xff0c;文件描述符&#xff0c;会随着进程数增加而增加。Linux是有文件句柄限制的&#xff0c;而且默认都是1024…

elasticsearch-安装IK分词器

一、el默认分词器 es在创建倒排索引时需要对文档分词&#xff0c;在搜索时&#xff0c;需要对用户输入内容分词。但默认的分词规则对中文处理并不友好&#xff0c;在kibana的DevTools中测试 二、IK分词器 处理中文分词&#xff0c;一般会使用IK分词器。 GitHub官方网址&…

java八股 spring + mybatis

Spring常用注解&#xff08;绝对经典&#xff09;_spring注解-CSDN博客 框架篇-02-Spring-单例bean是线程安全的吗_哔哩哔哩_bilibili 1.spring.bean 单例 线程不安全 2.AOP 项目里可以说记录用户登录日志&#xff0c;利用request去获取姓名、ip、、请求方式、url&#xff0…

【开源】基于JAVA语言的企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

html页面 通过jquery.i18n.properties添加多语言

第一步&#xff1a; <div class"set_lang"><div class"lang_btn" data-langtype"zh">中文简体</div> | <div class"lang_btn" data-langtype"hk">中文繁體</div> |<div class"lang_b…

2024年 Kubernetes 四大趋势预测

Kubernetes 在生产环境中的复杂性已经成为常态&#xff0c;在2023年这个平台工程盛行的时代&#xff0c;容器管理的最大亮点可能在于其灵活性&#xff0c;然而在运维政策和治理等方面仍然存在诸多挑战。Kubernetes 最大的吸引力之一在于其可扩展性和跨环境的广泛用例。但是&…