华为OD刷题C卷 - 每日刷题38(万能字符单词拼写,虚拟理财游戏)

1、(万能字符单词拼写):

这段代码是解决“万能字符单词拼写”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个辅助方法success,用于计算使用给定字符chars能拼写出的单词words中的单词个数。

main方法首先读取单词数组words的个数和每个单词,然后读取掌握的字符control。接着,调用getResult方法并打印能拼写出的单词个数。

getResult方法遍历所有单词,并使用success方法检查每个单词是否能使用control中的字符拼写。如果能,计数器加一。

success方法首先统计control中万能字符?的数量。然后,遍历单词中的每个字符,检查该字符是否在control中。如果不在,但还有万能字符,就减少万能字符的数量;如果不在,且没有万能字符,则返回false。如果所有字符都能匹配,则返回true。

2、(虚拟理财游戏):

这段代码是解决“虚拟理财游戏”的问题。它提供了一个Java类Main,其中包含main方法,用于在虚拟游戏中选择最优的投资方式以获得最大回报。

main方法首先读取产品数、总投资额和可接受的总风险值。然后,读取每个产品的投资回报率、风险值和最大投资额度。接着,使用嵌套循环遍历所有可能的投资组合,更新最大投资回报和最小风险值,并记录最优投资策略。

最后,使用StringJoiner构建每个产品的投资额序列,并打印结果。

package OD371;import java.util.Arrays;
import java.util.Scanner;/*** @description 万能字符单词拼写* @level 4* @score 100*//*** 题目描述* 有一个字符串数组 words 和一个字符串 chars。* <p>* 假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。* <p>* words 的字符仅由 a-z 英文小写字母组成,例如 "abc"* <p>* chars 由 a-z 英文小写字母和 "?" 组成。其中英文 "?" 表示万能字符,能够在拼写时当作任意一个英文字母。例如:"?" 可以当作 "a" 等字母。* <p>* 注意:每次拼写时,chars 中的每个字母和万能字符都只能使用一次。* <p>* 输出词汇表 words 中你掌握的所有单词的个数。没有掌握任何单词,则输出0。* <p>* 输入描述* 第一行:输入数组 words 的个数,记作N。* <p>* 第二行 ~ 第N+1行:依次输入数组words的每个字符串元素* <p>* 第N+2行:输入字符串chars* <p>* 输出描述* 输出一个整数,表示词汇表 words 中你掌握的单词个数* <p>* 备注* 1 ≤ words.length ≤ 100* 1 ≤ words[i].length, chars.length ≤ 100* 所有字符串中都仅包含小写英文字母、英文问号*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//单词数组个数int n = Integer.parseInt(sc.nextLine());//单词数组String[] words = new String[n];for (int i = 0; i < n; i++) {words[i] = sc.nextLine();}//掌握的字符String control = sc.nextLine();//输出能拼写出来的单词个数System.out.println(getResult(words, control));}//输出能用掌握的单词拼写出单词的个数public static int getResult(String[] words, String control) {int count = 0;for (int i = 0; i < words.length; i++) {if (success(words[i], control)) {count++;}}return count;}//判断word能否被已掌握的字符拼写出public static boolean success(String word, String control) {//统计control中?的个数char[] chars = control.toCharArray();int n = chars.length;int count = 0;for (int i = 0; i < n; i++) {if (chars[i] == '?') {count++;}}char[] words = word.toCharArray();int m = words.length;for (int i = 0; i < m; i++) {//如果字符不在已掌握的字符里或没有多余?号,则返回falseif (!control.contains(words[i] + "")) {//判断是否还有?if (count > 0) {count--;} else {return false;}} else {//每个字符只能用一次,所以需要把匹配到的字符去掉control = control.replaceFirst(words[i] + "", "");}}return true;}} 
package OD372;import java.util.*;/*** @description 虚拟理财游戏* @level 6* @score 100*//*** 题目描述* 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。* <p>* 现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。* <p>* 你要在可接受范围内选择最优的投资方式获得最大回报。* <p>* 备注:* <p>* 在虚拟游戏中,每项投资风险值相加为总风险值;* 在虚拟游戏中,最多只能投资2个理财产品;* 在虚拟游戏中,最小单位为整数,不能拆分为小数;* 投资额*回报率=投资回报* 输入描述* 第一行:* <p>* 产品数(取值范围[1,20])* 总投资额(整数,取值范围[1, 10000])* 可接受的总风险(整数,取值范围[1,200])* 第二行:产品投资回报率序列,输入为整数,取值范围[1,60]* <p>* 第三行:产品风险值序列,输入为整数,取值范围[1, 100]* <p>* 第四行:最大投资额度序列,输入为整数,取值范围[1, 10000]* <p>* 输出描述* 每个产品的投资额序列*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//产品数 总投资额 可接受的总风险int[] line1 = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int m = line1[0];//[1,20]int n = line1[1];//[1,10000]int x = line1[2];//[1,200]//投资回报率序列int[] backs = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//产品风险int[] risks = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//最大投资额度序列int[] invests = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//最大投资回报int max_invest_back = 0;//最小风险值int min_invest_risk = Integer.MAX_VALUE;//存放最后选择的iD和对应投资额Map<Integer, Integer> select = new HashMap<>();for (int i = 0; i < m; i++) {//如果当前产品风险大于最大风险,跳过if (risks[i] > x) {continue;}//如果投资单件产品最优if (risks[i] <= x) {//产品i的投资额int invest_i = Math.min(invests[i], n);//产品i的投资回报int back_i = invest_i * backs[i];//如果只投资i产品,投资回报高于当前的最优策略,或者等于最优但风险值更小if (back_i > max_invest_back || back_i == max_invest_back && risks[i] < min_invest_risk) {//更新最大投资回报max_invest_back = back_i;//更新最小风险min_invest_risk = risks[i];//把之前选择清空,重新选择select.clear();select.put(i, invest_i);}}//购买两个产品for (int j = i + 1; j < m; j++) {//如果总风险不超过risk_all 则都投资if (risks[i] + risks[j] <= x) {//产品i j分别的投资额int invest_i;int invest_j;//如果投资回报率不相同,则谁回报率高,谁多投if (backs[i] != backs[j]) {if (backs[i] > backs[j]) {//总和不能超过ninvest_i = Math.min(invests[i], n);invest_j = Math.min(invests[j], n - invest_i);} else {invest_j = Math.min(invests[j], n);invest_i = Math.min(invests[i], n - invest_j);}} else {//产品回报率相同,谁风险小,谁多投if (risks[i] < risks[j]) {invest_i = Math.min(invests[i], n);invest_j = Math.min(invests[j], n - invest_i);} else {invest_j = Math.min(invests[j], n);invest_i = Math.min(invests[i], n - invest_j);}}//投资两个产品的总投资回报int invest_back = invest_i * backs[i] + invest_j * backs[j];//总风险int invest_risk = risks[i] + risks[j];//如果大于当前最优投资回报 或等于但风险更小,则更新if (invest_back > max_invest_back || invest_back == max_invest_back && invest_risk < min_invest_risk) {max_invest_back = invest_back;min_invest_risk = invest_risk;//清空当前最优策略select.clear();//添加当前的最优策略 id 投资额if (invest_i > 0) {select.put(i, invest_i);}if (invest_j > 0) {select.put(j, invest_j);}}}}}//存放结果StringJoiner sj = new StringJoiner(" ");for (int k = 0; k < m; k++) {//如果id在select中,则添加对应的投资额if (select.containsKey(k)) {sj.add(select.get(k) + "");} else {sj.add("0");}}System.out.println(sj);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 置换检验是一种非参数统计方法&#xff0c;它不依赖于数据的分布形态&#xff0c;因此特别适…

flowable 适配达梦数据库(最简单的方式)

只需要引入一个 jar 包&#xff0c;就可以轻松实现 flowable 对达梦数据库的适配。 参考如下博客&#xff1a; SpringBoot 中的 Liquibase 适配达梦数据库&#xff08;DM&#xff09;和 Flowable 工作流_liquibase 达梦数据库-CSDN博客 SpringBoot 中的 flyway 支持达梦数据库…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

lvgl v8 个人总结

1. lv_group_remove_all_objs(g);//!!移除组所有对象&#xff0c;也需要再次设置默认组。默认组的作用&#xff0c;和一个一个的添加组&#xff0c;没有本质区别。 2. lv_group_del(g);//这个会同时删除组&#xff0c;即切断了输入设备与组的绑定。所以之后需要重新creat。&…

使用 select 进行 UART 通信的注意事项

文章目录 引言UART 通信中的 select 函数select 函数的工作原理使用 select 进行 UART 通信的注意事项示例代码 引言 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;是一种用于异步串行通信的硬件协议&#xff0c;常用于计算机和外设之间的数据交换…

Apple创始人斯蒂夫乔布斯2005年在斯坦福大学的毕业典礼演讲:Steve Jobs‘ 2005 Stanford Commencement Address

Steve Jobs’ 2005 Stanford Commencement Address Link: https://www.youtube.com/watch?vUF8uR6Z6KLc and https://www.youtube.com/watch?vHd_ptbiPoXM 文章目录 Steve Jobs 2005 Stanford Commencement AddressSummaryVocabularyTranscriptConnecting the dotsLove and …

从函数逼近角度理解神经网络、残差连接与激活函数

概述 最近思考激活函数的时候&#xff0c;突然想到神经网络中残差连接是不是和函数的泰勒展开很像&#xff0c;尤其是在激活函数 f ( x ) x 2 f(x)x^2 f(x)x2时(这个激活函数想法来源于 f ( x ) R e L U 2 ( x ) [ 3 ] f(x)ReLU^2(x)[3] f(x)ReLU2(x)[3])&#xff0c;所以验…

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

Adaboost集成学习 | Adaboost集成学习特征重要性分析(Python)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习特征重要性分析(Python)Adaboost(自适应增强)是一种常用的集成学习方法,用于提高机器学习算法的准确性。它通过组合多个弱分类器来构建一个强分类器。在Adaboost中,每个弱分类器都被赋予…

基于LangChain框架搭建知识库

基于LangChain框架搭建知识库 说明流程1.数据加载2.数据清洗3.数据切分4.获取向量5.向量库保存到本地6.向量搜索7.汇总调用 说明 本文使用openai提供的embedding模型作为框架基础模型&#xff0c;知识库的搭建目的就是为了让大模型减少幻觉出现&#xff0c;实现起来也很简单&a…

Ocam:高效录屏,屏幕录制最佳?

名人说&#xff1a;&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Ocam2、核心特点 二、下载安装1、下载2、安装 三、使用方法 很高兴你…

【5】apollo编写python节点步骤及实例

在workspace/modules下新建包buildtool create --template component modules/test_one 编译包 buildtool build -p modules/test_two/ 增加自己的proto消息 在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译. syntax "proto2";package apollo;…

【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

使用RedisShake迁移自建Redis数据至阿里云Redis

一、前言 最近有个需求&#xff0c;需要把自建的Redis数据迁移至阿里云的Redis RDS。阿里云有官方的数据传输服务DTS&#xff08;Data Transmission Service&#xff09;。全量迁移是免费的&#xff0c;但增量迁移需要按量收费&#xff0c;遂放弃。经过一番搜索&#xff0c;发…

数据库的概念-数据库、数据库管理系统、数据库系统、数据库管理员、数据库设计人员、开发管理使用数据库系统的人员

一、数据库&#xff08;DB&#xff09; 1、数据库就是存储数据的仓库&#xff0c;只不过这个仓库是在计算机存储设备上 2、严格的说&#xff0c;数据库是长期存储在计算机内、有组织的、统一管理的、可共享的相关数据的集合 3、数据库应是为一个特定目标而设计、构建并装入数…

ClickHouse备份方案

ClickHouse备份方案主要包括以下几种方法&#xff1a; 一、使用clickhouse-backup工具&#xff1a; &#xff08;参考地址&#xff1a;https://blog.csdn.net/qq_43510111/article/details/136570850&#xff09; **安装与配置&#xff1a;**首先从GitHub获取clickhouse-bac…

利用MSSQL模拟提权

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 利用MSSQL模拟提权 在MS SQL数据库&#xff0c;可以使用EXECUTE AS语句&#xff0c;以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟&#xff08;Impers…

38.MessageToMessageCodec线程安全可被共享Handler

handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…

Go日常分享 - error类型是指针类型吗?

背景 这个问题的产生来源于小泉在开发rpc接口时返回error遇到的问题&#xff0c;开发时想在defer里对err进行最终的统一处理赋值&#xff0c;发现外层接收一直都未生效。问题可以简化为成下面的小demo。 func returnError() error {var err errordefer func() {//err errors…

在 Oracle Linux 8.9 上安装中文和日文字体的完整指南

在 Oracle Linux 8.9 上安装中文和日文字体的完整指南 在 Oracle Linux 8.9 上安装中文和日文字体的完整指南前提条件安装步骤1. 更新系统2. 安装字体包安装中文字体安装日文字体 3. 安装字体配置工具4. 更新字体缓存5. 验证安装 可能遇到的问题及解决方案结语 在 Oracle Linux…