华为OD刷题C卷 - 每日刷题36(剩余银饰的重量,最大坐标值、小明的幸运数)

1、(剩余银饰的重量):

这段代码是解决“剩余银饰的重量”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于计算经过一系列熔化过程后剩余银饰的重量。

main方法首先读取银饰的个数n,然后读取每个银饰的重量并存储到LinkedList中。接着,调用getResult方法并打印最终剩余银饰的重量。

getResult方法首先对银饰重量进行升序排序。然后,使用循环每次从列表末尾移除三个最重的银饰,并根据题目描述计算熔化后剩余的银饰重量。如果存在剩余,则将这个重量插入到已排序的列表中。这个过程一直重复,直到列表中的银饰数量少于三个。

最后,根据列表中的银饰数量,返回剩余银饰的重量。如果剩余两块,则返回较重的那块的重量;如果只剩下一块,则返回那块的重量;如果没有剩余,则返回0。

2、(最大坐标值、小明的幸运数):

这段代码是解决“最大坐标值、小明的幸运数”的问题。它提供了一个Java类Main,其中包含main方法和getMaxCoordinate方法,用于计算小明在游戏中达到的最大坐标值。

main方法首先读取指令的总数n,然后读取幸运数m和n个指令。接着,调用getMaxCoordinate方法并打印小明在游戏中达到的最大坐标值。

getMaxCoordinate方法首先进行异常检查,确保输入的幸运数和指令在合理的范围内。然后,使用一个ArrayList来存储小明每一步的坐标值。遍历指令序列,根据指令和幸运数更新当前坐标值,并将每一步的坐标值存储到列表中。

最后,对坐标值列表进行降序排序,并返回列表中的第一个元素,即小明达到的最大坐标值。

package OD367;

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * @description 剩余银饰的重量
 * @level 4
 * @score 100
 * @type 二分查找
 */

/**
 * 题目描述
 * 有 N 块二手市场收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。
 * <p>
 * 每一回合,从中选出三块最重的银饰,然后一起熔掉。
 * <p>
 * 假设银饰的重量分别为 x 、y和z,且 x ≤ y ≤ z。那么熔掉的可能结果如下:
 * <p>
 * 如果 x == y == z,那么三块银饰都会被完全熔掉;
 * 如果 x == y 且 y != z,会剩余重量为 z - y 的银块无法被熔掉;
 * 如果 x != y 且 y == z,会剩余重量为 y - x 的银块无法被熔掉;
 * 如果 x != y 且 y != z,会剩余重量为 z - y 与 y - x 差值 的银块无法被熔掉。
 * 最后,
 * <p>
 * 如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可)
 * 如果只剩下一块,返回该块的重量
 * 如果没有剩下,就返回 0
 * 输入描述
 * 输入数据为两行:
 * <p>
 * 第一行为银饰数组长度 n,1 ≤ n ≤ 40,
 * 第二行为n块银饰的重量,重量的取值范围为[1,2000],重量之间使用空格隔开
 * 输出描述
 * 如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可);
 * <p>
 * 如果只剩下一块,返回该块的重量;
 * <p>
 * 如果没有剩下,就返回 0。
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //银饰个数
        int n = sc.nextInt();
        //n块银饰的重量 使用LinkedList方便排序和插入
        LinkedList<Integer> weight = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            weight.add(sc.nextInt());
        }
        System.out.println(getResult(weight));

    }

    //计算剩余银饰
    public static int getResult(LinkedList<Integer> weight) {
        //int res = 0;
        //升序排列,每次从最后取三个
        weight.sort(Integer::compareTo);
        //如果剩余银饰>=3个,则每次取后三个
        while (weight.size() >= 3) {
            int z = weight.removeLast();
            int y = weight.removeLast();
            int x = weight.removeLast();
            //取出差值
            // 如果 x == y == z,那么下面公式结果:remain=0, 表示三块银饰完全融掉
            // 如果 x == y && y != z,那么下面公式结果:remain = z - y
            // 如果 x != y && y == z,那么下面公式结果:remain = y - x
            // 如果 x != y && y != z,那么下面公式结果:remain = Math.abs((z - y) - (y - x))
            int remain = Math.abs((z - y) - (y - x));
            //如果有剩余,则把剩余的银饰插入到原升序列表中
            if (remain != 0) {
                //如果 remain 被找到,返回值是它在列表中的索引。
                //如果 remain 没有被找到,返回值是它应该插入的位置,以便保持列表的排序顺序。
                //这个值通常是在列表中的一个负数,其绝对值表示 remain 应该插入到的位置的索引。具体来说,-(insertion point + 1)。
                int index = Collections.binarySearch(weight, remain);
                if (index < 0) {
                    index = -(index + 1);
                }
                //插入到index位置
                weight.add(index, remain);
            }
        }
        //如果剩两个,返回较大值
        if (weight.size() == 2) {
            return Math.max(weight.get(0), weight.get(1));
        } else if (weight.size() == 1) {
            return weight.get(0);
        } else {
            //没有剩,则返回0
            return 0;
        }
    }
}
package OD368;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @description 最大坐标值、小明的幸运数
 * @level 3
 * @score 100
 */

/**
 * 题目描述
 * <p>
 * 小明在玩一个游戏,游戏规则如下:
 * 在游戏开始前,小明站在坐标轴原点处(坐标值为0).
 * 给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指令前进指定步数或者后退指定步数。前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走。
 * 幸运数为一个整数,如果某个指令正好和幸运数相等,则小明行进步数+1。
 * <p>
 * 例如:
 * <p>
 * 幸运数为3,指令为[2,3,0,-5]
 * <p>
 * 指令为2,表示前进2步;
 * <p>
 * 指令为3,正好和幸运数相等,前进3+1=4步;
 * <p>
 * 指令为0,表示原地不动,既不前进,也不后退。
 * <p>
 * 指令为-5,表示后退5步。
 * <p>
 * 请你计算小明在整个游戏过程中,小明所处的最大坐标值。
 * <p>
 * 输入描述
 * 第一行输入1个数字,代表指令的总个数 n(1 ≤ n ≤ 100)
 * <p>
 * 第二行输入1个数字,代表幸运数m(-100 ≤ m ≤ 100)
 * <p>
 * 第三行输入n个指令,每个指令的取值范围为:-100 ≤ 指令值 ≤ 100
 * <p>
 * 输出描述
 * 输出在整个游戏过程中,小明所处的最大坐标值。异常情况下输出:12345
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //指令总数
        int n = sc.nextInt();
        //幸运数
        int luck = sc.nextInt();
        //指令序列
        int[] command = new int[n];
        for (int i = 0; i < n; i++) {
            command[i] = sc.nextInt();
        }
        System.out.println(getMaxCoordinate(command, luck));
    }

    //返回最大坐标,异常返回12345
    public static int getMaxCoordinate(int[] command, int luck) {
        //异常
        if (luck < -100 || luck > 100 || command == null || command.length == 0 || command.length > 100) {
            return 12345;
        }
        //指令范围:-100~100
        for (int i : command) {
            if (i < -100 || i > 100) {
                return 12345;
            }
        }

        List<Integer> list = new ArrayList<>();
        list.add(0);
        int now = 0;
        //步数分正负,负数幸运值的话就是多—1
        for (int i = 0; i < command.length; i++) {
            if (command[i] == luck && luck > 0) {
                now += command[i] + 1;
                list.add(now);
            } else if (command[i] == luck && luck < 0) {
                now += command[i] - 1;
                list.add(now);
            } else {
                //包括command[i]=luck=0的情况,不用多走一步
                now += command[i];
                list.add(now);
            }
        }
        list.sort((a, b) -> b - a);
        return list.get(0);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Pytorch框架的深度学习ConvNext神经网络宠物猫识别分类系统源码

第一步&#xff1a;准备数据 12种宠物猫类数据&#xff1a;self.class_indict ["阿比西尼猫", "豹猫", "伯曼猫", "孟买猫", "英国短毛猫", "埃及猫", "缅因猫", "波斯猫", "布偶猫&q…

jupyter使用的一个奇怪bug——SyntaxError: invalid non-printable character U+00A0

bug来由&#xff1a;从其他部分例如kaggle里复制来的代码直接粘贴在jupyter notebook里&#xff0c;每一行代码都会出现&#xff1a; Cell In[5], line 1 warnings.filterwarnings(ignore) ^ SyntaxError: invalid non-printable character U00A0 单元格 In[5]&#xff0c;第 …

多模态AI的挑战与早期壁垒的构建

伴随着Sora、GPT40的推出&#xff0c;多模态AI逐渐成为研究的热点和应用的趋势。然而&#xff0c;多模态AI的发展并非一帆风顺&#xff0c;它面临着诸多挑战和壁垒。 一、多模态AI的难点 多模态AI的核心在于将不同模态的信息&#xff08;如文本、图像、音频、视频等&#xff…

AI大佬都在说下一个爆点是智能体,建议开发者抢占先机!

现在大模型行至一年&#xff0c;风口与炒作如影随形&#xff0c;相信很多人身处其中但仍然感到很迷失&#xff0c;这个行业到底发展到什么程度了&#xff0c;作为普通开发者还有什么可以抓住的机会&#xff1f;从AI大佬的观点中&#xff0c;我们能获得一些行业变化的新风向。 …

ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory

ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory 目录 ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory1. 启动 SSH 代理2. 添加 SSH 密钥3. 使用 Git Bash 或其他终端4. 使用 Pageant&#xff08;适用于 PuTTY 用…

Eigen中 Row-Major 和 Column-Major 存储顺序的区别

Eigen中 Row-Major 和 Column-Major 存储顺序的区别 flyfish Eigen::RowMajor 是 Eigen 库中用于指定矩阵存储顺序的一种选项 理解 Row-Major 和 Column-Major 存储顺序的区别&#xff0c;绘制一个单一的图来显示内存中的元素访问顺序,在图中用箭头表示访问顺序. import nu…

从实例出发,深入探索Java SE中数组的易错点

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

神经网络模型---AlexNet

一、AlexNet 1.导入tensorflow库&#xff0c;这里给简称为tf库 import tensorflow as tf from tensorflow.keras import datasets, layers, modelsdatasets&#xff1a;是用于训练和测试机器学习模型的数据集合 layers&#xff1a;是构建神经网络模型的关键组成部分 models&a…

豆包高质量声音有望复现-Seed-TTS

我们介绍了 Seed-TTS&#xff0c;这是一个大规模自回归文本转语音 &#xff08;TTS&#xff09; 模型系列&#xff0c;能够生成与人类语音几乎没有区别的语音。Seed-TTS 作为语音生成的基础模型&#xff0c;在语音上下文学习方面表现出色&#xff0c;在说话人的相似性和自然性方…

摄像头图像矫正的表格生成方法

1.设置单元格高宽 点击表格左上角 的 小三角 列宽: HOME -> Rows and Columns -> Column Width 5 CM 行高: HOME -> Rows and Columns -> Row Height 5 CM 2.设置 条件格式 HOME -> Conditional Formatting-> Manager Rules 点击 左上方 New Rule…

win11右键小工具

开头要说的 在日常使用场景中&#xff0c;大家如果用的是新的笔记本电脑&#xff0c;应该都是安装的win11系统&#xff0c; 当然win11系统是最被诟病的&#xff0c; 因为有很多人觉得很难操作&#xff0c; 就比如一个小小的解压操作&#xff0c; 在win7和win10上&#xff…

gitlab 身份验证手机号验证没86

处理方案 在浏览器中摁 【F12】打开控制台&#xff0c;选择网络模块&#xff0c;找到手机号列表的请求&#xff0c;请求是 https://gitlab.com/-/countries&#xff0c;右击数据区域点击【替换内容】如下&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/di…

gRPC(Google Remote Procedure Call Protocol)谷歌远程过程调用协议

文章目录 1、gRPC简介2、gRPC核心的设计思路3、gPRC与protobuf关系 1、gRPC简介 gPRC是由google开源的一个高性能的RPC框架。Stubby Google内部的RPC&#xff0c;演化而来的&#xff0c;2015年正式开源。云原生时代是一个RPC标准。 2、gRPC核心的设计思路 网络通信 ---> gPR…

API-声明变量const优先

学习目标&#xff1a; 掌握声明变量const优先 学习内容&#xff1a; 变量声明总结 变量声明&#xff1a; 变量声明有三个var let const。 首先var排除&#xff0c;老派写法&#xff0c;问题很多&#xff0c;可以淘汰掉… 建议&#xff1a;const优先&#xff0c;尽量使用cons…

amr文件怎么转换成mp3?超好用的四种转换方法介绍!

amr文件怎么转换成mp3&#xff1f;在当今数字化时代&#xff0c;音频格式的多样性给我们带来了更广泛的选择&#xff0c;其中AMR格式就是其中之一&#xff0c;AMR格式在录音和通话领域得到广泛应用&#xff0c;但与此同时&#xff0c;它也存在一些挑战和局限性&#xff0c;尽管…

推荐常用的三款源代码防泄密软件

三款源代码防泄密软件——安秉源代码加密、Virbox Protector 和 MapoLicensor——确实各自在源代码保护的不同方面有其专长。这些软件可以满足企业对于源代码保护的三大需求&#xff1a;防止泄露、防止反编译和防止破解。 安秉源代码加密&#xff1a; 专注于源代码文件的加密&…

安卓Context上下文

目录 前言一、Context简介二、Application Context2.1 Application Context的创建过程2.2 Application Context的获取过程 三、Activity的Context创建过程四、Service的Context创建过程 前言 Context也就是上下文对象&#xff0c;是Android较为常用的类&#xff0c;但是对于Co…

C++ 70 之 类模版中的成员函数,在类外实现

#include <iostream> #include <string> using namespace std;template<class T1, class T2> class Students10{ public:T1 m_name;T2 m_age;Students10(T1 name, T2 age); // 类内声明 类外实现// {// this->m_name name;// this->m_age …

【PPT设计前沿】2024年PPT新趋势,让你的演示文稿引领潮流!

文章目录 一、简约风格的新诠释二、动态元素与交互性的深度融合三、个性化与定制化的独特展现四、大数据与可视化的创新应用五、绿色环保与可持续性的倡导《PPT完美设计入门与进阶/入门与进阶》图书特色内容简介目录前言/序言 获取方式 随着技术的不断革新和创意设计的蓬勃发展…

技术分析:开源大模型的兴起与热门项目推荐

技术分析&#xff1a;开源大模型的兴起与热门项目推荐 引言 随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;开源大模型成为了许多程序员和研究人员关注的焦点。开源项目不仅促进了技术的快速迭代和普及&#xff0c;还为更多的人提供了学习和实践的机会。…