f90boy 2022-03-17 13:30 采纳率: 59.5%
浏览 83
已结题

数字0~9组成的四个数乘法算式,求乘积最大和最小的算法思路

用 0123456789 这十个无重复的数字,组成一位数、两位数、三位数、四位数各一个,A、B、C、D;其中,A不能等于0。
问题:ABC*D 的乘积最大和最小分别是多少?具体是哪四个数组成的算式?
求:算法,思路。

  • 写回答

3条回答 默认 最新

  • 愿此后再无WA 新星创作者: python技术领域 2022-03-17 15:39
    关注

    使用全排列函数枚举0 ~ 9所有顺序数字,把特殊情况排除掉,如0开头,以及每个数字前面都不能为0。需要3 ~ 4秒钟出结果。

    import itertools
    
    
    ma = -1
    mi = float("inf")
    dic = {}
    for t in tuple(itertools.permutations([str(i) for i in range(9,-1,-1)])):
        if t[0] == '0':
            break
    
        if t[4] == '0' or t[7] == '0' or t[9] == '0':
            continue
        
        D = int(''.join(t[0:4]))
    
        C = int(''.join(t[4:4+3]))
    
        B = int(''.join(t[7:7+2]))
    
        A = int(''.join(t[9:9+1]))
    
        mul = D * C * B * A
    
        if mul > ma:
            ma = mul
            dic[ma] = (D,C,B,A)
    
        if mul < mi:
            mi = mul
            dic[mi] = (D,C,B,A)
    
    print(ma,dic[ma])
    print(mi,dic[mi])
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日