【新】华为OD机试 - 水仙花数 2(Python)| 刷完获取OD招聘渠道

这篇博客介绍了华为OD统一考试B卷中的水仙花数2问题,要求将字符串分割成ASCII码和为水仙花数的子串。文章详细分析了解题思路,核心知识点涉及ASCII码和ord函数,提供了Python代码实现。当分割结果不唯一时返回-1,唯一时返回子串数目。内容还包括代码运行结果和版权说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OD 统一考试 B 卷:水仙花数 2

题目

给定非空字符串 s,将该字符串分割成一些子串,使每个子串的 ASCII 码值的和均为水仙花数

  1. 若分割不成功则返回 0;
  2. 若分割成功且分割结果不唯一 则返回-1;
  3. 若分割成功且分割结果唯一 则返回分割后子串的数目

输入

输入字符串的最大长度为 200

输出描述

根据题目中的情况返回响应结果

示例一

输入

abc

输出

0

说明

分割不成功

示例二

输入

f3@d5a8

输出

-1

说明

分割成功但分割结果不唯一,可以分割为两组
一组 f3和@d5a8
另一组 f3@d5和a8

说明

分割不成功

示例三

输入

AXdddF

输出

2

说明

成功分割且分割结果唯一
可以分割为AX(153)dddF(370)两个子串

解题思路

本题的目标是实现查找一个字符串中是否存在长度为 3 的子字符串,使得该子字符串的每一位的 ASCII 码值的立方和等于该子字符串的 ASCII 码值之和。

代码通过不断地将一个字符串分割为两个部分,并判断每个部分是否满足条件,从而实现查找的逻辑。如果存在满足条件的子字符串,则将它的长度加入结果数组;如果结果数组的大小大于 1,则返回-1;否则,如果结果数组的大小为 1,则返回该数组中的唯一数值。

核心知识点

ASCII 码和 ord 函数:ASCII 码是计算机内码的一种,每个字符对应一个 ASCII 码。Python 中的 ord 函数可以返回一个字符的 ASCII 码。

Python 代码实现


                
### 华为OD在线笔中的字符串分割与水仙实现 #### 字符串分割算法解析 对于字符串分割问题,在华为OD中通常涉及对给定字符串按照特定规则进行拆分。这类题目可能要求基于字符位置、指定分隔符或其他逻辑条件来成操作。 在Java环境下,可以利用`split()`函轻松应对大部分基础场景下的字符串切割需求[^1]: ```java public class StringSplitExample { public static void main(String[] args) { String input = "This is a test string"; // 使用空格作为分隔符切分字符串 String[] parts = input.split(" "); for (String part : parts){ System.out.println(part); } } } ``` 当遇到更复杂的业务逻辑时,则需自定义解析策略,比如通过正则表达式匹配或循环遍历源字符串并构建子串列表等方式达成目标。 #### 水仙求解方案 针对水仙花(也称为阿姆斯特朗),是指一个n位(n≥3),其各个位上的字立方和等于该本身。例如153是一个三位的水仙花因为\(1^3 + 5^3 + 3^3=153\)。 下面给出Python版本寻找一定范围内所有水仙花的方法[^2]: ```python def find_narcissistic_numbers(start, end): result = [] for num in range(max(100, start), min(end+1, 999)): sum_of_cubes = sum(int(digit)**3 for digit in str(num)) if sum_of_cubes == num: result.append(num) return result if __name__ == "__main__": print(find_narcissistic_numbers(100, 999)) ``` 此代码片段展示了如何在一个区间内查找所有的三位水仙花,并将其存储到列表中返回。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值