【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 火星字符串(100分) - 三语言AC题解(Python/Java/Cpp)

news2024/11/23 8:31:46

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

火星字符串(100分)

🌍 评测功能需要 订阅专栏 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🍡 火星字符串
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码

🍡 火星字符串

问题描述

K小姐最近在研究火星文明,她发现火星人使用的运算符号与地球人不同。火星人使用的运算符号有 #$,其中 # 号的优先级高于 $ 号,相同的运算符按从左往右的顺序计算。同时,火星人的运算符号与地球人的对应关系如下:

x x x # y y y = 4 4 4 * x x x + 3 3 3 * y y y + 2 2 2
x x x $ y y y = 2 2 2 * x x x + y y y + 3 3 3

其中 x x x y y y 是无符号整数,地球人的公式按照 C C C 语言的规则进行计算。

现在 K小姐得到了一段火星人的字符串报文,她希望你能帮助翻译并计算结果。

输入格式

输入一行字符串,表示火星人的字符串表达式。

  • 输入的字符串由无符号整数和操作符(#$)组成,操作数与操作符之间没有任何分隔符。
  • 操作数的取值范围为 32 32 32 位无符号整数。
  • 保证输入以及计算结果不会出现整数溢出。
  • 保证输入的字符串为合法的求值报文。

输出格式

输出一个整数,表示火星人字符串表达式的计算结果。

样例输入

7#6$5#12

样例输出

157

数据范围

  • 字符串长度不超过 100 100 100
  • 操作数的取值范围为 32 32 32 位无符号整数。

题解

本题可以分为两个步骤来解决:

  1. 将火星人的 # 运算符替换为地球人的运算表达式。
  2. 计算替换后的地球人表达式的值。

对于步骤 1,我们可以使用正则表达式匹配 # 运算符及其左右两侧的操作数,然后根据公式 x x x # y y y = 4 4 4 * x x x + 3 3 3 * y y y + 2 2 2 进行替换。重复这个过程直到字符串中不再包含 # 运算符。

对于步骤 2,由于替换后的字符串只包含 $ 运算符,我们可以将字符串按照 $ 号分割成多个整数,然后根据公式 x x x $ y y y = 2 2 2 * x x x + y y y + 3 3 3 依次进行计算即可。

时间复杂度: O ( n ) O(n) O(n),其中 n n n 为字符串的长度。每个字符最多被替换一次,因此总时间复杂度为 O ( n ) O(n) O(n)

参考代码

  • Python
import re
import functools
def mars_calc(expr):
    while True:
        match = re.search(r'(\d+)#(\d+)', expr)
        if not match:
            break
        x, y = map(int, match.groups())
        expr = expr.replace(match.group(), str(4 * x + 3 * y + 2), 1)
    
    return functools.reduce(lambda x, y: 2 * x + y + 3, map(int, expr.split('$')))

expr = input().strip()
print(mars_calc(expr))
  • Java
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String expr = sc.next();
        System.out.println(marsCalc(expr));
        sc.close();
    }
    
    public static long marsCalc(String expr) {
        Pattern pattern = Pattern.compile("(\\d+)#(\\d+)");
        
        while (true) {
            Matcher matcher = pattern.matcher(expr);
            if (!matcher.find()) {
                break;
            }
            
            long x = Long.parseLong(matcher.group(1));
            long y = Long.parseLong(matcher.group(2));
            expr = expr.replaceFirst(matcher.group(), String.valueOf(4 * x + 3 * y + 2));
        }
        
        return Arrays.stream(expr.split("\\$"))
                     .mapToLong(Long::parseLong)
                     .reduce((x, y) -> 2 * x + y + 3)
                     .orElse(0);
    }
}
  • Cpp
#include <iostream>
#include <string>
#include <regex>
#include <sstream>
#include <vector>

// Function to perform the Mars calculation described in Python
int mars_calc(std::string expr) {
    std::regex pattern("(\\d+)#(\\d+)");
    std::smatch match;

    // First operation: repeatedly replace (\d+)#(\d+) with 4*x + 3*y + 2
    while (std::regex_search(expr, match, pattern)) {
        int x = std::stoi(match[1].str());
        int y = std::stoi(match[2].str());
        std::string replacement = std::to_string(4 * x + 3 * y + 2);
        expr.replace(match.position(), match.length(), replacement);
    }

    // Second operation: split by '$' and calculate 2*x + y + 3, accumulate the results
    std::stringstream ss(expr);
    std::string item;
    std::vector<int> numbers;
    while (std::getline(ss, item, '$')) {
        numbers.push_back(std::stoi(item));
    }

    int result = 0;
    if (!numbers.empty()) {
        result = numbers[0];
        for (size_t i = 1; i < numbers.size(); ++i) {
            result = 2 * result + numbers[i] + 3;
        }
    }

    return result;
}

int main() {
    std::string expr;
    std::getline(std::cin, expr);
    std::cout << mars_calc(expr) << std::endl;
    return 0;
}

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

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

相关文章

函数的一点点习题

1、利用递归计算0-n的和 #include <stdio.h> #include <string.h> #include <stdlib.h> int rec(int n) {if(n0)return 0;elsereturn nrec(n-1); } int main(int argc, const char *argv[]) {int n0;printf("please enter n:");scanf("%d&quo…

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT

本地部署大模型 在本地部署大模型有多种方式&#xff0c;其中Ollama方式是最简单的&#xff0c;但是其也有一定的局限性&#xff0c;比如大模型没有其支持的GGUF二进制格式&#xff0c;就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型&#xff0c;并易于阅读…

服务器新硬盘分区、格式化和挂载

文章目录 参考文献查看了一下起点现状分区(base) ~ sudo parted /dev/sdcmklabel gpt&#xff08;设置分区类型&#xff09;增加分区 格式化需要先退出quit&#xff08;可以&#xff09;(base) / sudo mkfs.xfs /dev/sdc/sdc1&#xff08;失败&#xff09;sudo mkfs.xfs /dev/s…

走近科学之《netty 的秘密》

Approaching science《the secret of netty》 IO 相关概念、五种 IO 模型、BIO NIO AIO 特点及区别、NIO 设计原理及核心组件、netty 简介及应用场景、netty 线程模型&#xff08;Reactor 线程模型&#xff09;、netty 设计原理及核心组件、netty 常用技巧实现&#xff08;心跳…

数据结构进阶——AVL树

数据结构进阶——AVL树 0. 前言1. AVL树的概念2. AVL树节点&#xff0c;和树的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. AVL树的删除&#xff08;了解&#xff09;7. AVL树实现完整代码8. AVL树的性能 0. 前言 学习本章&#xff0c;需要大家先掌握搜索二叉树&#xf…

04 远程访问及控制

目录 4.1 SSH远程管理 4.1.1 配置OpenSSH服务器 1. 服务监听选项 2. 用户登录控制 3. 登录验证方式 4.1.2 使用SSH客户端程序 1. 命令程序ssh、scp、sftp 1. ssh远程登录 2. scp远程复制 3. sftp安全FTP 2. 图形工具Xshell 4.1.3 构建密钥对验证的SSH体系 1. 在客户端创建密钥…

Hive笔记-3

3.2.2 查看表 1) 展示所有表 (1) 语法: 语法: SHOW TABLES [IN database_name] LIKE [identifier_with_wildcards]; In database_name 写的是查哪个数据库,一般不写默认是当前数据库 Like 后面跟通配符表达式 (2) 案例: 查看在 db_hive1 数据库里有没有以 stu 开头的表 …

实用软件下载:UltraEditUEStudio最新安装包及详细安装教程

​UEStudio简介&#xff1a;UEStudio建立在上文本编辑器UltraEdit的功能基础上&#xff0c;并为团队和开发人员提供了其他功能&#xff0c;例如深度Git集成&#xff0c;您可以直接在UEStudio中克隆&#xff0c;签出&#xff0c;更新&#xff0c;提交&#xff0c;推入/拉入等操作…

FPGA - 滤波器 - IIR滤波器设计

一&#xff0c;IIR滤波器 在FPGA - 滤波器 - FIR滤波器设计中可知&#xff0c;数字滤波器是一个时域离散系统。任何一个时域离散系统都可以用一个N阶差分方程来表示&#xff0c;即&#xff1a; 式中&#xff0c;x(n)和y(n)分别是系统的输入序列和输出序列&#xff1b;aj和bi均为…

Sermant标签路由能力在同城双活场景的应用

作者&#xff1a;聂子雄 华为云高级软件工程师 摘要&#xff1a;目前应用上云已成为趋势&#xff0c;用户也对应用在云上的高可靠方案有更高追求&#xff0c;目前同城双活场景作为应用高可靠方案中的一种常见实践方案&#xff0c;对微服务流量提出了数据中心亲和性的要求&…

Java_JDK下载与环境变量配置

目录 一、JDK下载安装 二、安装后配置环境变量 三、在编辑器里使用JDK 一、JDK下载安装 JDK 是Java开发工具包&#xff0c;它提供了用于开发和运行Java程序所需的工具和库。JDK包括Java编译器、Java虚拟机、Java标准库等。在IDEA中使用Java语言编写代码时&#xff0c;需要安…

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

前言 第一次使用海康视觉算法平台VisionMaster 4.3.0&#xff0c;项目中要使用这个平台进行视觉处理并获取结果。 运行效果 开发环境 C#&#xff0c; WPF&#xff0c; vs2022, 海康视觉算法平台VisionMaster 4.3.0 基本概念 上图这些.sol为后缀的是vm的方案文件。 打开方案文…

[element-ui]el-select多选选择器选中其中一个选项,不可删除

背景&#xff1a; 产品真的很多奇奇怪怪的需求&#xff0c;一边吐槽一边实现。 前提&#xff1a;选择器作为表格的筛选项&#xff0c;提供三个选项值。 要求&#xff1a;默认选中其中一个值&#xff0c;这个值不可删除。 如图&#xff1a; 小声吐槽&#xff1a;搞这些有什么…

LSS算法核心原理详细解读,一看就懂,不懂请打我!

目录 核心整体流程分步阐述backbone几何关系&#xff08;创建视锥&#xff09;和视锥投影到egoVoxel PoolingHead 总结 核心 将2D图像特征转换到BEV feature特征 该算法是BEV领域中的一大基石 整体流程 流程步骤 &#xff08;1&#xff09;利用backbone获得环视图像&#xf…

Vue路由讲解-05

这里的路由并不是指我们平时所说的硬件路由器&#xff0c;这里的路由就是SPA&#xff08;single page application单页应用&#xff09;的路径管理器。再通俗的说&#xff0c;vue-router就是WebApp的链接路径管理系统。 vue-router是Vue.js官方的路由插件&#xff0c;它和vue.j…

Vue48-ref属性

一、需求&#xff1a;操作DOM元素 1-1、使用原生的id属性 不太好&#xff01; 1-2、使用 ref属性 原生HTML中&#xff0c;用id属性给元素打标识&#xff0c;vue里面用ref属性。 给哪个元素加了ref属性&#xff0c;vc实例对象就收集哪个元素&#xff01;&#xff01;&#xff0…

开放式耳机怎么挑选,个人经验总结快来看!

在选择开放式耳机时&#xff0c;了解一些关键的选购因素和推荐的品牌款式是非常有帮助的。这类耳机允许声音在耳机和外界之间自然流动&#xff0c;提供更自然的听觉体验。它们通常不会完全隔绝外界噪音&#xff0c;适合需要随时留意周围环境的人群&#xff0c;如运动爱好者或需…

AutoMQ 生态集成 CubeFS

CubeFS [1] 是新一代云原生存储产品&#xff0c;目前是云原生计算基金会 CNCF托管的孵化阶段开源项目&#xff0c; 兼容 S3、POSIX、HDFS 等多种访问协议&#xff0c;支持多副本与纠删码两种存储引擎&#xff0c;为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性&#x…

安徽保安员精选模拟试题(含答案)

1、风险管理的三要素是()&#xff0c;风险评价和风险控制。 A、频率分析 B、风险分析 C、风险转移 D、后果估计 答案:B 2、治安保卫重要部位是指由()确定的、关系本单位生产业务全局的部位和生产环节。 A、企事业重点单位 B、地方政府 C、企事业单位保卫协会 D、公安机关 …

垂直领域大模型微调最全指南

1.概述 一年来多以来&#xff0c;大语言模型发展和变化越来越快&#xff0c;总体呈现出模型尺寸越变越大&#xff0c;算力需求越来越多&#xff0c;模型推理要求越来越高的特点。在这种背景下&#xff0c;现在不同的人关于垂域 LLM 出现了一些争议&#xff0c;一部分人认为随着…