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

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

✨ 本系列打算持续跟新华为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:breakx, 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 + 2while (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 resultsstd::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.mzph.cn/bicheng/28906.shtml

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

相关文章

电影《加菲猫家族》观后感

上周看了电影《加菲猫家族》&#xff0c;本片其中有很多明亮的画面&#xff0c;相关艳丽的色彩&#xff0c;充满温馨的场景&#xff0c;很符合加菲猫的一贯画风&#xff0c;即使反派出场时&#xff0c;带有阴暗的感觉&#xff0c;看起也不是特别吓人&#xff0c;比较欢乐气氛&a…

定时器介绍之8253芯片

目录 定时器简介 8253功能介绍 组成 工作原理 相关引脚 启动方法 计数方式 实现 读取计数值 定时器简介 8253功能介绍 内部结构 相关引脚 计数器组成 工作原理 启动方法 计数方式 初始化&#xff1a;写入控制字——>写入计数初值 实现 计数长度选择&#xff1a…

jingxiang制作

文章目录 jingxiang制作为什么需要jingxiang制作如何进行jingxiang制作 快照方式制作jingxiang制作命令do cker commit 快照制作jingxiang创建临时工作目录编写一个实例代码启动一个容器替换国内软件源安装编译软件源代码拷贝到容器中编译运行提交为一个jingxiang测试是否可以正…

金额工具类:数字转字符串(每三位以逗号分隔)

问题背景 要求实现一个金额转换的工具类,输入一个数字金额,返回新的字符串,每三位以逗号分隔。 例如: 输入:1000 输出:1,000输入:5689104 输出:5,689,104输入:12345678 输出:12,345,678代码实现 /*** @description 数组格式化, 每三位以逗号分隔* @date 2024-6-1…

虚拟机Ping不通主机

1.问题描述 虚拟机IP&#xff1a; 192.168.3.133 主机ip&#xff1a;192.168.3.137 虚拟机Ping不通主机 主机可以ping通虚拟机 2.解决方案 设置桥接模式 控制面板找到网络和Internet设置 3.问题解决

数据库基础——数字、字符串、日期时间、二进制

数据库的分类 定义&#xff1a;主要是数据表的创建、删除、修改 操纵&#xff1a;对数据进行增删添改 控制&#xff1a;对数据库的权限进行管理 数据库不区分大小写&#xff0c;一条语句的结尾以英文分号结尾 命名不能是关键字&#xff0c;只能使用英文、数字和下划线 注释可以…

实施细则!2024年四川省科学技术奖励办法申报条件、要求、对象及材料整理

2024年四川省科学技术奖励办法申报条件、要求、对象及材料整理如下&#xff0c;四川省的企业单位可以了解一下 第一章  总 则 第一条 为做好四川省科学技术奖励工作&#xff0c;规范评审程序&#xff0c;保障四川省科学技术奖(以下简称“省科学技术奖”)的评审质量&#xf…

geoserver 如何设置数据目录

在GeoServer中&#xff0c;数据目录是存储配置文件、数据存储、图层、样式等的重要目录。默认情况下&#xff0c;GeoServer的数据目录位于GeoServer安装目录下的data_dir文件夹。但在很多情况下&#xff0c;用户可能希望将数据目录设置在一个自定义位置&#xff0c;以便更好地管…

手持气象仪:科技与自然交汇的奇妙工具

TH-SQ5在广袤无垠的大自然中&#xff0c;天气总是瞬息万变&#xff0c;让人难以捉摸。然而&#xff0c;随着科技的进步&#xff0c;人类已经能够借助各种先进的仪器来预测和监测天气变化&#xff0c;其中&#xff0c;手持气象仪便是其中的佼佼者。 手持气象仪&#xff0c;顾名…

Java获取本机IP地址的方法(内网、公网)

起因是公司一个springboot项目启动类打印了本机IP地址加端口号&#xff0c;方便访问项目页面&#xff0c;但是发现打印出来的不是“无线局域网”的ip而是“以太网适配器”ip&#xff0c;如下图所示 这样就导致后续本地起项目连接xxl-job注册节点的时候因为不在同个局域网下ping…

打假-代码都让AI写,CS还有前途吗?加州大学伯克利分校:CDSS申请人数飙升48%!

一、背景 现在 CSDN 上发现了一篇文章 点进去文档的内容在说CDSS专业 还有一篇文章 文章基本上都是同一个意思&#xff0c;CDSS专业申请人数飙升 48%&#xff0c;但却有人刻意的把计算机专业突出出来。我不确定有人刻意把 CDSS 专业 和 CS 专业混淆的目的是什么&#xff1f;…

【数据结构】红黑树实现详解

在本篇博客中&#xff0c;作者将会带领你使用C来实现一棵红黑树&#xff0c;此红黑树的实现是基于二叉搜索树和AVLTree一块来讲的&#xff0c;所以在看本篇博客之前&#xff0c;你可以先看看下面这两篇博客 【C】二叉搜索树-CSDN博客 【数据结构】AVLTree实现详解-CSDN博客 在这…

设计四大基本原则的全面解析

每每问起设计四大基本原则&#xff0c;无论是蜚荣全球的业内大咖还是初出茅庐的张三李四&#xff0c;都会不约而同地告诉你一个答案&#xff1a;亲密性、对齐、重复、对比。 自罗宾威廉姆斯于《写给大家看的设计书》中提出后&#xff0c;四大基本原则涵盖了品牌、电商、包装、…

xxe漏洞学习

一、什么是xxe漏洞 XXE就是XML外部实体注入&#xff0c;当允许引用外部实体时&#xff0c; XML数据在传输中有可能会被不法分子被修改&#xff0c;如果服务器执行被恶意插入的代码&#xff0c;就可以实现攻击的目的攻击者可以通过构造恶意内容&#xff0c;就可能导致任意文件读…

会展和会议有什么区别

经常能看到很多地方会议会展两者一同出现&#xff0c;会让人误认为是同一个东西&#xff0c;其实不然。会展和会议是两种不同的活动形式&#xff0c;它们在目的、规模、参与者以及内容方面存在一些区别。 1、目的 会展&#xff1a;会展主要是为了展示和推广企业、产品或服务。…

数据驱动制造:EMQX ECP 指标监测功能增强生产透明度

迈向未来的工业生产&#xff0c;需要的不仅是自动化&#xff0c;更是智能化。如果工业企业的管理者能够实时监测每一生产环节的设备运行状态&#xff0c;每一数据点位情况&#xff0c;洞察和优化每一步生产流程&#xff0c;他们将能够做出更精准的决策&#xff0c;提高生产效率…

硕士毕业论文《基于磁纹理的磁化动力学研究》

前言 本文是博主的硕士毕业论文&#xff0c;应该也是“自旋电子学&#xff08;微磁学&#xff09;”博客专栏的最后一篇博客&#xff0c;该毕业论文预设排版的PDF版本见下载链接&#xff1a;https://download.csdn.net/download/qq_43572058/89447526。若该博客专栏对读者您的…

SD-WAN在教育行业的应用及优势解析

随着教育领域的数字化转型&#xff0c;网络技术的需求变得愈发迫切。作为一种前沿的网络解决方案&#xff0c;SD-WAN正在为教育行业提供强有力的支持。本文将详细探讨SD-WAN在教育行业的应用&#xff0c;并分析其为教育行业带来的众多优势。 实现多校区高效互联 教育机构通常拥…

低代码、无代码的区别在哪?

低代码和无代码有什么不一样&#xff1f;相信很多人会对这两个概念产生混淆。 顾名思义&#xff0c;低代码开发平台只是减少了编写代码的数量&#xff0c;并不是完全不需要编写代码。 而无代码开发平台是完全不需要编写任何代码&#xff0c;只需要拖拽平台上的功能组件就能够…

Dart 弱引用进阶

前言 村里的老人说&#xff1a;“真正的强者&#xff0c;都是扮猪吃老虎。” 日常开发中经常需要用到弱引用&#xff0c;Dart 语言里也有提供弱引用的接口 WeakReference&#xff0c;我们可以基于它开发更强大的复杂结构。 在前面的文章中&#xff0c;我们用到了一个以弱引用…