judybbq 发表于 2022-8-10 22:36:14

小学数学题用python怎么实现

用4~9这六个数字分别组成两个三位数,使这两个三位数和乘积最大?
for i in range(4,10):
    for j in range(4,10):
      for x in range(4,10):
            if i != j and j != x and x != i:
                print(i,j,x,sep='')
                …… 下面不会了{:5_99:}

一点点儿 发表于 2022-8-10 22:40:23

使这两个三位数的乘积最大吗?

judybbq 发表于 2022-8-10 22:42:18

一点点儿 发表于 2022-8-10 22:40
使这两个三位数的乘积最大吗?

用4~9这六个数字分别组成两个三位数,使这两个三位数的乘积最大?

qq1151985918 发表于 2022-8-10 23:00:46

本帖最后由 qq1151985918 于 2022-8-10 23:28 编辑

from itertools import combinations as c

res = []
for i in c(range(4, 10), 3):
    a = ''.join(map(str, sorted(i, reverse=True)))
    b = ''.join(map(str, sorted(set(range(4, 10))-set(i), reverse=True)))
    res.append()
result = sorted(res, key=lambda x:x[-1])[-1]
print(f'结果为:{result}*{result}={result[-1]}')

一点点儿 发表于 2022-8-10 23:07:30

nums =
max = 1
for i in range(6):
    for j in range(6):
      if j != i:
            for k in range(6):
                if k != i and k != j:
                  for l in range(6):
                        if l != i and l != j and l != k:
                            for m in range(6):
                              if m != i and m != j and m != k and m != l:
                                    for n in range(6):
                                        if n != i and n != j and n != k and n != l and n != m:
                                          a = 100 * nums + 10 * nums + nums
                                          b = 100 * nums + 10 * nums + nums
                                          t = a * b
                                          if t > max:
                                                max = t
                                                num1 = a
                                                num2 = b
print(num1, "×", num2, "=", max)
                                          

DaggerRoo 发表于 2022-8-10 23:24:48

def sort_output(digit_chose):
    digit_chose.sort(reverse = True)
    num = 0
    for each in digit_chose:
      num = num * 10 + each

    return num

def del_digit(original_digit, digit_chosen):
    return list(set(original_digit) - set(digit_chosen))

dl =
former = 0

for i in range(4, 10):
    for j in range(i, 10):
      for k in range(j, 10):
            if i != j and i != k & j != k:
                digit_chosen =
                other_num = del_digit(dl, digit_chosen)
                product = sort_output(digit_chosen) * sort_output(other_num)
                if product > former:
                  former = product
                  factor1 = sort_output(digit_chosen)
                  factor2 = sort_output(other_num)

print('%d × %d = %d' %(factor1, factor2, former))

judybbq 发表于 2022-8-11 10:22:45

qq1151985918 发表于 2022-8-10 23:00


{:5_108:},老大!好牛!,但对于刚刚接触python的我来说,看不懂,{:5_109:}。但是你的代码给我指明了方向和目标,非常感谢大佬支持!!

judybbq 发表于 2022-8-11 10:27:59

DaggerRoo 发表于 2022-8-10 23:24


谢谢大佬支持,{:5_106:}

qq1151985918 发表于 2022-8-11 11:28:14

judybbq 发表于 2022-8-11 10:22
,老大!好牛!,但对于刚刚接触python的我来说,看不懂,。但是你的代码给我指明了方 ...

代码最重要的是简洁高效对相似类型要有普适性,你写的那个显然就不太具备。6个数选3个还好,如果是10个数选5个那代码要多少?20个数选10个呢?繁琐冗余不是代码解决问题的特点。我这个代码是具有普适性的,楼主还是初学者对这些可能理解还不是很深刻,建议楼主加强学习从更多思路更多方法学习到更好更高效的解题方式。

judybbq 发表于 2022-8-12 14:57:33

qq1151985918 发表于 2022-8-11 11:28
代码最重要的是简洁高效对相似类型要有普适性,你写的那个显然就不太具备。6个数选3个还好,如果是10个数 ...

是的 是的 !! 我就是同意你的观点,{:5_109:} 所以才是方向和目标
页: [1]
查看完整版本: 小学数学题用python怎么实现