当前位置:   article > 正文

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

给定一个正整数 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/384919
推荐阅读
相关标签
  

闽ICP备14008679号