鱼C论坛

 找回密码
 立即注册
查看: 1666|回复: 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. 如何判定结果是否唯一,然后返回相应数字?
  1. def Str_sli(str):

  2.     def Nar_Num(num):
  3.         Ge = num % 10
  4.         Shi = num // 10 % 10
  5.         Bai = num % 100
  6.         if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
  7.             return True
  8.         else:
  9.             return False

  10.     length = len(str)
  11.     j = 0
  12.     str_num = 0
  13.     for i in range(length):
  14.         str_num += ord(str[i])
  15.         if Nar_Num(str_num):
  16.             str = str[(i+1):]
  17.             i = 0
  18.             j += 1
  19.         else:
  20.             i += 1
  21.     if str == '':
  22.         print(j)
  23.     else:
  24.         print(0)
  25. if __name__ == '__main__':
  26.     Str_sli('LMkdce')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

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

  1. def Str_sli(str):

  2.     def Nar_Num(num):
  3.         Ge = num % 10
  4.         Shi = num // 10 % 10
  5.         Bai = num // 100

  6.         if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
  7.             return True
  8.         else:
  9.             return False

  10.     length = len(str)
  11.     for l in range(0, length):
  12.         for r in range(l + 1, length + 1):
  13.             str_ascii = 0
  14.             for i in str[l:r]:
  15.                 str_ascii += ord(i)
  16.             if Nar_Num(str_ascii):
  17.                 print(str[l:r])


  18. if __name__ == '__main__':
  19.     Str_sli('!(((')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 10:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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