Python学习笔记-1-字符串插入字符

时间:2025-01-23 07:48:10
问题:
给定一个正整数 m (1<=m<5)和一个只包含数字的字符串 s (5<len(s)<=20) 使用 m 个 * 号插入到字符串中,且两个乘号不能相邻,插入后形成一个乘法算式。找出一种使乘法算式值最大的插入方式,并将结果输出。(乘号 * 不能放在字符串首尾位置)
案例:
m = 2, s = ‘123456’ 插入两个 * 号。插入的方式有:
123456=6912,123456=10488…
分析:
这道题目的关键是找出所有可插入 * 号的位置,生成不同的算式。观察题目可知,问题可转化为将 m 个元素放入 n 个盒子的问题,也就是组合问题。在Python内置库中有计算组合的函数:
from itertools import combinations
p = list(combinations(range(1,len(s)),m))
轻松得到所有可能的组合 p
p 中的每一个项目都是一种插入方式,每个项目中的元素就是字符串中插入 * 号的位置。
接下来就好办了:
首先将字符串转化为列表;
ls = list(s)
对 p 中的每一种元素进行遍历;
对列表 ls 中的每一个元素进行遍历;
如果列表 ls 中的某一个字符的索引与 p 中的元素值指示的插入点符合,在此插入 * 号。每次插入 * 号后 ls 中后边的元素相应后移,因此设置变量 k 修正插入点的变化。
for i in pos:
for j in range(len(s)):
if j == i:
(j+k,c)
k += 1
一组插入方案完成后,将列表 ls 转回到字符串:
‘’.join(ls)
并添加到 rst 结果列表中;
在主程序中,根据 rst 结果列表生成字典 d ,d 的键是算式计算结果,值是对应的算式。
完整的程序代码如下: