【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:
            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;
}

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

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

相关文章

Elixir学习笔记——Erlang 库

Elixir 提供了与 Erlang 库的出色互操作性。事实上&#xff0c;Elixir 不鼓励简单地包装 Erlang 库&#xff0c;而是直接与 Erlang 代码交互。在本节中&#xff0c;我们将介绍一些 Elixir 中没有的最常见和最有用的 Erlang 功能。 Erlang 模块的命名约定与 Elixir 不同&#x…

电商风控指南 | 直播间里的藏匿的“羊毛党”,普通消费者看不到

目录 直播间里的羊毛党 电商要针对性进行防范 随着618网购节的开启&#xff0c;各大电商平台的直播间再次成为消费者关注的焦点。在5月20日的一场酒水电商直播中&#xff0c;主播仅用43分钟便实现了成交额破亿&#xff0c;售出3万瓶白酒。然而&#xff0c;这些“秒杀”特价商品…

Excel加密怎么设置?这5个方法不容错过!(2024总结)

Excel加密怎么设置&#xff1f;如何不让别人未经允许查看我的excel文件&#xff1f;如果您也有这些疑问&#xff0c;那么千万不要错过本篇文章了。今天小编将向大家分享excel加密的5个简单方法&#xff0c;保证任何人都可以轻松掌握&#xff01;毫无疑问的是&#xff0c;为Exce…

SpringBoot配置第三方专业缓存技术jetcache远程缓存方案和本地缓存方案

JetCache 是一个基于 Java 的分布式缓存解决方案&#xff0c;旨在提供高性能和可扩展性。它支持多种后端存储&#xff0c;如 Redis、Hazelcast、Tair 等&#xff0c;可以作为应用程序的缓存层&#xff0c;有效地提升数据访问性能和响应速度。 JetCache 的主要特点包括&#x…

语音识别相关文章整理目录

一、语音大模型架设与功能实现 使用sherpa-ncnn进行中文语音识别&#xff08;ubuntu22&#xff09;-CSDN博客文章浏览阅读953次&#xff0c;点赞30次&#xff0c;收藏26次。请注意&#xff0c;需要首先安装安装了所有必要的依赖项&#xff0c;包括 CMake、Git 和一个合适的 C/…

Vue路由讲解-05

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

一道全等三角形证明题

接着上次那道题 一道初中一年级几何题解析&#xff0c;再来做一道初中一年级下半学期几何题目&#xff1a; 傍晚丢垃圾散步时看到小小的学生学习群里丢了这个题目&#xff0c;想到一个解法。实在构造不出契合题干阅读材料结论的三角形&#xff0c;索性先根据这结论做一个推论…

云动态摘要 2024-06-17

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [低至1折]腾讯混元大模型产品特惠 腾讯云 2024-06-06 腾讯混元大模型产品特惠&#xff0c;新用户1折起&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

从《2024年人工智能指数报告》 看AI的最新发展趋势

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 《2024年人工智能指数报告》是由斯坦福大学的“以人为本”人工智能研究所&#xff08;Stanford HAI&#xff09;发布的&#xff0c;具体发布时间…

使用宝塔面板部署Django应用(不成功Kill Me!)

使用宝塔面板部署Django应用 文章目录 使用宝塔面板部署Django应用 本地操作宝塔面板部署可能部署失败的情况 本地操作 备份数据库 # 备份数据库 mysqldump -u root -p blog > blog.sql创建requirements # 创建requirements.txt pip freeze > requirements.txt将本项目…

【unity笔记】三、冰山碰撞变成碎块效果

一、模型准备 共需准备两个模型&#xff0c;一个原始模型&#xff0c;一个破碎后的模型。 破碎后的模型制作教程&#xff1a; 下载Blender 导入原始模型在添加偏好设置中添加Cell Fracture插件&#xff0c;调整模型碎裂效果。导出&#xff0c;保存到项目预制体文件夹。 二、…

3d模型怎么加室外场景渲染的步骤---模大狮模型网

在进行3D模型渲染时&#xff0c;将其放置在室外场景中可以提高渲染效果和真实感。以下是将3D模型加入室外场景的步骤&#xff1a; 1. 选择合适的场景&#xff1a;首先需要选择合适的室外场景&#xff0c;例如城市街道、森林、海滩等等。选择场景时需要考虑模型的大小和比例&…

教育培训系统(FastAdmin+ThinkPHP+Unipp)

引领学习新风尚 &#x1f4da; 引言&#xff1a;教育新篇章 随着科技的不断发展&#xff0c;教育形式也在不断创新与变革。教育培训系统作为这一变革的重要载体&#xff0c;正逐渐改变着我们的学习方式。今天&#xff0c;就让我们一起探索教育培训系统的魅力&#xff0c;看看它…

Navicat和SQLynx功能比较三(数据导出:使用MySQL近千万数据测试)

数据导出的功能在数据库管理工具中是最普遍的功能之一。所以数据导出的功能稳定性和性能也是数据库管理工具是否能很好地满足应用需求的一个考虑因素。 目录 1. 整体比较 2. 示例 2.1 前置环境 2.2 Navicat导出 2.3 SQLynx导出 2.4 性能对比结果&#xff08;690万行数据&…

浙江电信联合中兴通讯取得新突破,完成融合边缘商用验证

前不久&#xff0c;浙江电信联合中兴通讯在融合边缘方面取得新突破&#xff0c;在嘉兴完成了融合边缘的商用验证&#xff0c;并发布了商用版本。接下来&#xff0c;双方在融合边缘方面正式进入商用阶段&#xff0c;有效赋能新质生产力。    随着数字经济的快速发展&#xff0…

github国内加速访问有效方法

这里只介绍实测最有效的一种方法&#xff0c;修改主机的Hosts文件&#xff0c;如果访问github网站慢或者根本无法访问的时候可以采用下面方法进行解决。 1、搜索一个IP查询网站 首先百度搜索选择一个IP查询的网站&#xff0c;这里我用下面这个网站&#xff08;如果该网站失效…

C#——类和对象详情

类和对象 类 类是一种数据结构&#xff0c;它可以包含数据成员&#xff08;常量和字段&#xff09;、函数成员&#xff08;方法、属性、事件、索引器、运算符、实例构造函数、静态构造函数和析构函数&#xff09;以及嵌套类型。类类型支持继承&#xff0c;继承是一种机制&…

【大分享04】OFD版式赋能政务服务电子文件归档和电子档案管理

关注我们 - 数字罗塞塔计划 - 本篇是参加由电子文件管理推进联盟联合数字罗塞塔计划发起的“大分享”活动投稿文章&#xff0c;来自北京数科网维技术有限责任公司&#xff0c;作者&#xff1a;张严。 PART1 政务服务电子文件归档和电子档案管理背景 政务服务是政务服务机构…

3大法则教你高效制定奖励规则(含参考案例)

在实施全民分销的过程中&#xff0c;SaaS产品方和合作伙伴推广者之间的合作关系可以用河马与牛椋鸟之间的共生关系来形容——牛椋鸟以栖息在河马背上并清理其身上的昆虫为生。这种关系对两者来说都是极其有益的&#xff1a;牛椋鸟获得了稳定的食物来源&#xff0c;而河马则有效…

在线预览多类型文件_全栈

目录 一、下载运行项目 二、项目功能 三、前端项目引用 四、文件预览样式更改 在做项目时经常用到在线预览文件&#xff0c;给大家介绍一个好用的在线预览文件项目。使用技术是后端Java&#xff0c;前端Freemarker模板。 FreeMarker 特别适应与 MVC 模式的 Web 应用&#x…