鱼C论坛

 找回密码
 立即注册
查看: 1438|回复: 1

字符串分割问题

[复制链接]
发表于 2022-5-16 21:02:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述:
给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCIIA码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
输入描述: 1、输入字符串的最大长度为 200
输出描述:根据题目描述中情况返回相应的结果
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
示例:
输入
abc
输出
0
我写的代码如下,找了一个符合题目的可将字符串分割为两端,字母的ASCII码之和为水仙花数字,但是输出显示的是0。
上了一天班头晕脑胀的,不想再继续想了,所以想请教一下兄弟们:
1. 我的代码哪里出了问题?为什么不能正确输出“1”?
2. 如何判定结果是否唯一,然后返回相应数字?
def Str_sli(str):

    def Nar_Num(num):
        Ge = num % 10
        Shi = num // 10 % 10
        Bai = num % 100
        if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
            return True
        else:
            return False

    length = len(str)
    j = 0
    str_num = 0
    for i in range(length):
        str_num += ord(str[i])
        if Nar_Num(str_num):
            str = str[(i+1):]
            i = 0
            j += 1
        else:
            i += 1
    if str == '':
        print(j)
    else:
        print(0)
if __name__ == '__main__':
    Str_sli('LMkdce')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-16 21:40:46 | 显示全部楼层

你 Bai 位的数算错了,应该是 num // 100,另外题目中写的是 "子串" 不是指单个字符

应该要获取子串进行计算 ASCII 值之和,而不是你代码中循环单个字符进行计算 ASCII 后直接判断水仙花数

这里用两个 for 循环嵌套 滑动窗口法 遍历子串,参考代码:
def Str_sli(str):

    def Nar_Num(num):
        Ge = num % 10
        Shi = num // 10 % 10
        Bai = num // 100

        if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
            return True
        else:
            return False

    length = len(str)
    for l in range(0, length):
        for r in range(l + 1, length + 1):
            str_ascii = 0
            for i in str[l:r]:
                str_ascii += ord(i)
            if Nar_Num(str_ascii):
                print(str[l:r])


if __name__ == '__main__':
    Str_sli('!(((')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表