STEMAPython2022年2月第五题(给定一个正整数 M(1≤M≤5)和一个只包含数字的字符串(5<字符串长度≤20)。使用 M 个乘号插入到字符串中,且两个乘号不能相邻,插入后生成一个乘法算)

编程实现:
给定一个正整数 M(1≤M≤5)和一个只包含数字的字符串(5<字符串长度≤20)。使用 M 个乘号插入到字符串中,且两个乘号不能相邻,插入后生成一个乘法算式。找出一种使乘法算式数值最大的插入方式,并将结果输出。(乘号不能放在字符串的首尾位置)
如 M=2,字符串为 123456,插入 2 个乘号。插入方式有:
123456=6912,123456=10488,123456=13104 , 123456=14070
123456=16416,123456=22848 ,123456=24840 ,
123456=27552,123456=33210,
123456=37020。
其中乘法算式数值最大是第十种,为37020。

输入描述:
第一行输入一个正整数 M(1≤M≤5),表示乘号个数
第二行输入一个只包含数字的字符串(5<字符串长度<20),表示要插入 M 个乘号的字符串
输出描述:
输出一个整数,表示最大乘积数值

样例输入:
2
123456
样例输出:
37020

解题思路:
1、这道题是一道排序的题目。通过插入’'在不同的字符不同的位置上,但这里要注意一下。在Python中,字符串是不可变的,字符串无法直接删除、插入字符串之间的特定字符
2、字符串本身特性是不能直接插入,所以借助列表去解决。
3、这里现在懂得eval函数语法特性,通过语法特性将字符型’1
23456’转化成数字的 123456。
4、join函数应用,(“”.join©)将字符列表转化成字符串
5、根据题意分析得出母类:1
23456、123456=16416、123456=27552、123456=37020
6、每个母类对应产生子类,如:母类1
23456对应子类有:123456、123456、 12345*6。以此类推。
程序如下:

A=[]
def abc(list1,left,rihgt):##判断在交换过程中是否出现'1*003*04'
    global A
    r = rihgt
    for i in range(rihgt - 1, left, -1):##这里一定倒数循环,正面循环会提前结束
        if list1[left+1] == '0'and list1[left+2]!='*':
            list1.pop(left+1)##如果存在第一个 * 后面 0 话 删除的之后,left的位置是不变的,继续接着判断是否 0
            r-=1
        else:
            break
    for i in range(len(list1)-1,r+1,-1):
        if list1[r+1]=='0':
            list1.pop(r+1)
        else:
            break
    A.append("".join(list1))

n=int(input())
a=list(input())
for i in range(1,len(a)-n+1):
    b=a[:]
    c=n
    j = i
    while c != 0:
        b.insert(j, "*")
        j += 2
        c -= 1
    c=b[:]
    if c[0]=='0'and c[1]!='*':##'01*23*45'这种情况,一个剔除“0”
        b.remove(c[0])
        j -= 1
        abc(b, j - 4, j - 2)##判断是否有这个类型的母类01*0*010
    else:
        abc(c, j - 4, j-2)

    for z in range(j - 2, len(b) - 2):
        ##这里j-2原因是:j在while循环结束时,增加2,不是第二个"*"的位置
        ##以一个基础类型1*2*3456,再通过循环交换方式,得到他的子类:1*23*456,1*234*56,1*2345*6
        b[z],b[z+1]=b[z+1],b[z]
        c=b[:]##重新将b数组数据导入到c中
        abc(c,j-4,z+1)
print(A)
a.clear()
for i in range(len(A)):
    a.append(eval(A[i]))
print(max(a))

有关注tema蓝桥杯的朋友,点点赞呗,点点关注呗

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ha___。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值