问题:
给定一个正整数 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 的键是算式计算结果,值是对应的算式。
完整的程序代码如下:
相关文章
- python字符串用什么括起来_python学习笔记——字符串使用方法
- Python学习笔记-1-字符串插入字符
- C#学习笔记15:字符串、文件、目录的操作方法
- Python学习笔记1-搭建Python环境 和 Python Hello World!
- Java编程思想学习笔记——字符串
- Lua学习笔记(4): 字符串
- Python学习笔记 (2) :字符串输出、操作、格式化和日期、时间格式化
- Python学习随笔(BSON数据格式 Python库的相对导入 文档字符串注释 Python中类的静态方法定义)
- 【原】Java学习笔记023 - 字符串缓冲区_正则表达式
- 自己从0开始学习Unity的笔记 I (C#字符串转换为数字)