鱼C论坛

 找回密码
 立即注册
查看: 2471|回复: 2

[已解决]给定一个字符串 s,请编程求出该字符串中的最大奇数。

[复制链接]
发表于 2022-12-6 22:10:23 | 显示全部楼层 |阅读模式

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

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

x
s = "43383"
   
n = len(s)
for j in range(n-1, -1, -1):
    if int(s[j]) % 2 == 1:
        # 找到第一个值为奇数的字符,返回 s[0:j+1]
        print(s[:j+1])
        break
# 未找到值为奇数的字符,返回空字符串
else:
    print(0)
解析:

首先,如果字符串 s 中不含有值为奇数的字符串,那么 s 的任何子字符串都不可能是奇数。

其实,我们需要考虑的是题目要求找出最大奇数。

判断奇数的条件无非就是看最后一位是否为奇数,也就是说假如 s[j] 为奇数的话,那么所有以 s[j] 为结尾的子字符串必将都是奇数
因此,其中最大的奇数便是 s[:j+1](j 是下标,切片由于是“左闭右开”,所以需要 +1)

求助各位大佬,这句 print(s[:j+1]) ,意思没懂,看解析也没看懂
虽然知道 “所有以 s[j] 为结尾的子字符串必将都是奇数,”的意思,。。。但是不懂该怎么理解 s[:j+1]这个意思
最佳答案
2022-12-6 22:37:49
本帖最后由 cflying 于 2022-12-6 22:56 编辑

上面不是写了嘛,s[0:j+1],只是说写法上0可以省略,默认从头开始
如果是要问为啥+1,人家上面不是也解释了嘛,切片时右开

s[0:j+1]就是从0位开始截取到第j位,例子中就是从0位截取到4位,直白说应该是s[0:4]但是语法规则里又是右开,所以必须得s[0:5]才能取到第4位

s[4]是43383中最后一个3(第4位,从0位开始数),但是s[0:4]是43383中的4338,所以要[0:5]才行,这就是右开
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 22:37:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cflying 于 2022-12-6 22:56 编辑

上面不是写了嘛,s[0:j+1],只是说写法上0可以省略,默认从头开始
如果是要问为啥+1,人家上面不是也解释了嘛,切片时右开

s[0:j+1]就是从0位开始截取到第j位,例子中就是从0位截取到4位,直白说应该是s[0:4]但是语法规则里又是右开,所以必须得s[0:5]才能取到第4位

s[4]是43383中最后一个3(第4位,从0位开始数),但是s[0:4]是43383中的4338,所以要[0:5]才行,这就是右开
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-7 08:35:49 | 显示全部楼层
cflying 发表于 2022-12-6 22:37
上面不是写了嘛,s[0:j+1],只是说写法上0可以省略,默认从头开始
如果是要问为啥+1,人家上面不是也解释 ...

谢谢大锅,s[0:j+1],我就一下子明白了,从第一位开始输出,真是脑子一下子没转过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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