Python蓝桥杯常考知识点-模拟

替换所有的问号

给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 '?' 字符。
题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中
任何一个。可以证明,在给定的约束条件下,答案总是存在的。
示例 1:
输入:s = "?zs"输出:"azs"解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合
题目要求的。只有 "z" 是无效的修改,因为字符串 "zzs" 中有连续重复的两个 'z' 。
示例 2:
输入:s = "ubv?w"输出:"ubvaw"解释:该示例共有 24 种解决方案,只有替换成 "v" 和 "w"
不符合题目要求。因为 "ubvvw" 和 "ubvww" 都包含连续重复的字符。

python 复制代码
#读取输入的字符串
s=input().strip()
#查找前后是否有一样的,根据?的位置来划分
for i in range (len(s)):
    if s[i]=='?':#处理?字符
        if i ==0: #问号在开头
            s=('b' if i+1 <len(s) and s[i+1]=='a' else'a')+s[i+1:]
        elif i==len(s)-1: #处理字符串结尾的问号
            s=s[:i]+('b'if s[i-1]=='a'else'a')
        else:#?在中间
            prev=s[i-1]
            next_char=s[i+1]
            if (prev=='a'and next_char=='b')or(prev=='b'and next_char=='a'):
              replacement='c'
            elif (prev=='a'and next_char!='b')or(prev!='b'and next_char=='a'):
                replacement='b'
            else:
                replacement='a'
            s=s[:i]+replacement+s[i+1:]
#输出
print(s)

1.字符串根据位置切片

2.通过检查前后字符是否重复来判断,先赋初值假设,然后来判断。

不用复杂判断,也不用遍历所有 26 个字母,只需按优先级选字符即可,核心逻辑为:

  1. 先尝试选a:如果a不等于前一个字符、也不等于后一个字符,就用a
  2. a不行,尝试选b:如果b满足条件,就用b
  3. ab都不行,选c(必然满足,因为最多只需要避开 2 个字符)。

GO shopping

最近 Awell 的运气特别好,这不,他在路边摊买彩票,居然中了大奖。秉着见者有份的原
则,他准备请咱们学校ACM-ICPC 训练基地的全体队员逛商场。
赶巧交大旁边有一家商场新店开张,正在进行打折促销活动。于是,咱们所有队员都在商场中大肆购买之后,在收银台前排起了长队。
话说回来,这家商场的打折方式有些奇怪:他们从在收银台前付账的所有****n 位顾客中,所有的第 mm 的倍数名顾客享受七五折优惠,其余顾客只能享受九五折。为了方便付账,Awell 拜托老板将付账者的姓名和付款金额打印出来,作为参考。
你需要注意的是,在收银台前长长的队伍中,有的可不止是 ACM 队员,同样,还有很多交大的同学慕名前来消费,为了区分他们,我们规定,所有 ACM****队员必须在姓名前加上前缀 ACM。
现在,请机智的你为 Awell 编写一个小程序,算一算他
总共需要花费多少钱呢?

输入格式
输入数据包含不超过 5 组,每组第一行有两个整数****n,m(1≤n,m≤1000),分别代表着在收银台
前队伍的全部人数 ,以及商家将会选择每第****m 位顾客打 7.5
接下来有n ,每行将会输入消费者的姓名(长度不超过 20 个字符),以及他们各自消费
的金额(消费金额不超过 1000)。
输出格式
每组数据输出一行 ,每行一个实数,表示Awell 总共需要花费多少
你应该注意的是,老板只收取"角"作为最小单位,而且他是一个锱铢必较的人,所以,如果
所付金额中存在小于****0.1 元的部分,那就至少要付 0.1 元给他(想着即将消瘦的钱包,Awell泪目中)。

python 复制代码
# 无限循环,用于持续读取多组输入,直到输入结束(EOF)
while True:
    try:
        # 读取每组输入的第一行,拆分出两个整数n和m
        # n:收银台队伍的总人数;m:每第m位ACM队员享受75折
        n, m = map(int, input().split())
        
        # 初始化总花费为浮点数0.0
        ans = 0.0
        
        # 遍历每位顾客(序号从1开始,因为题目中是"第m位",序号从1计数)
        for i in range(1, n + 1):
            # 读取当前顾客的姓名和消费金额,拆分字符串
            people, money_str = input().split()
            # 将金额字符串转换为浮点数,用于后续计算
            money = float(money_str)
            
            # 判断当前顾客是否是ACM队员(姓名以"ACM"开头)
            if people.startswith("ACM"):
                # 检查是否是第m的倍数位顾客(i是当前顾客的序号)
                if i % m == 0:
                    # 第m倍数位ACM队员:75折,金额×0.75后累加到总花费
                    ans += money * 0.75
                else:
                    # 非m倍数位ACM队员:95折,金额×0.95后累加到总花费
                    ans += money * 0.95
            else:
                # 非ACM队员:无折扣,金额直接累加到总花费
                ans += money
        
        # 手动实现四舍五入到1位小数(角)的逻辑
        # 步骤1:将总金额放大10倍,减去其整数部分,得到小数部分temp
        # 例如:ans=15.525 → ans*10=155.25 → int(155.25)=155 → temp=0.25
        temp = ans * 10 - int(ans * 10)
        
        # 步骤2:判断小数部分是否大于0.5,决定是否进1
        if temp > 0.5:
            # 小数部分>0.5:进1,放大后的整数部分+1后再缩小10倍
            ans = (int(ans * 10) + 1) / 10
        else:
            # 小数部分≤0.5:舍去,直接用放大后的整数部分缩小10倍
            ans = int(ans * 10) / 10
        
        # 格式化输出总花费,保留1位小数(符合题目输出格式要求)
        print("{:.1f}".format(ans))
    
    # 捕获EOFError异常(输入结束,比如控制台按Ctrl+D/Ctrl+Z)
    except EOFError:
        # 输入结束,跳出无限循环,程序终止
        break
相关推荐
油墨香^_^2 小时前
Spring Cloud Feign 进阶详解:契约测试、负载均衡、文件上传与原生API
java·开发语言
比奇堡鱼贩2 小时前
python第五次作业
开发语言·前端·python
半兽先生2 小时前
使用 retire.js 自动检测前端 JavaScript 库漏洞
开发语言·前端·javascript
码农小韩3 小时前
AIAgent应用开发——DeepSeek分析(二)
人工智能·python·深度学习·agent·强化学习·deepseek
之歆3 小时前
HA 高可用集群指南
java·开发语言
喵手3 小时前
Python爬虫实战:构建一个高健壮性的图书数据采集器!
爬虫·python·爬虫实战·零基础python爬虫教学·构建图书数据·采集图书数据·图书数据采集
lsx2024063 小时前
电子商务网站主机:选择与维护指南
开发语言
wangluoqi4 小时前
c++ 逆元 小总结
开发语言·c++
BackCatK Chen4 小时前
第十五章 吃透C语言结构与数据形式:struct/union/typedef全解析
c语言·开发语言·数据结构·typedef·结构体·函数指针·联合体