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

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

使用全排列函数枚举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

乘积最大应将最大数字放千位,依次将次大放百位、十位,......
乘积最小应将最小数字放千位,依次将次小放百位、十位,......

img