鱼C论坛

 找回密码
 立即注册
查看: 3147|回复: 9

[已解决]小学数学题用python怎么实现

[复制链接]
发表于 2022-8-10 22:36:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用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='')
                …… 下面不会了
最佳答案
2022-8-10 23:07:30
  1. nums = [4, 5, 6, 7, 8, 9]
  2. max = 1
  3. for i in range(6):
  4.     for j in range(6):
  5.         if j != i:
  6.             for k in range(6):
  7.                 if k != i and k != j:
  8.                     for l in range(6):
  9.                         if l != i and l != j and l != k:
  10.                             for m in range(6):
  11.                                 if m != i and m != j and m != k and m != l:
  12.                                     for n in range(6):
  13.                                         if n != i and n != j and n != k and n != l and n != m:
  14.                                             a = 100 * nums[i] + 10 * nums[j] + nums[k]
  15.                                             b = 100 * nums[l] + 10 * nums[m] + nums[n]
  16.                                             t = a * b
  17.                                             if t > max:
  18.                                                 max = t
  19.                                                 num1 = a
  20.                                                 num2 = b
  21. print(num1, "×", num2, "=", max)
  22.                                             
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-10 22:40:23 | 显示全部楼层
使这两个三位数的乘积最大吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-10 22:42:18 | 显示全部楼层
一点点儿 发表于 2022-8-10 22:40
使这两个三位数的乘积最大吗?

用4~9这六个数字分别组成两个三位数,使这两个三位数的乘积最大?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 23:00:46 | 显示全部楼层
本帖最后由 qq1151985918 于 2022-8-10 23:28 编辑
  1. from itertools import combinations as c

  2. res = []
  3. for i in c(range(4, 10), 3):
  4.     a = ''.join(map(str, sorted(i, reverse=True)))
  5.     b = ''.join(map(str, sorted(set(range(4, 10))-set(i), reverse=True)))
  6.     res.append([int(a), int(b), int(a)*int(b)])
  7. result = sorted(res, key=lambda x:x[-1])[-1]
  8. print(f'结果为:{result[0]}*{result[1]}={result[-1]}')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 23:07:30 | 显示全部楼层    本楼为最佳答案   
  1. nums = [4, 5, 6, 7, 8, 9]
  2. max = 1
  3. for i in range(6):
  4.     for j in range(6):
  5.         if j != i:
  6.             for k in range(6):
  7.                 if k != i and k != j:
  8.                     for l in range(6):
  9.                         if l != i and l != j and l != k:
  10.                             for m in range(6):
  11.                                 if m != i and m != j and m != k and m != l:
  12.                                     for n in range(6):
  13.                                         if n != i and n != j and n != k and n != l and n != m:
  14.                                             a = 100 * nums[i] + 10 * nums[j] + nums[k]
  15.                                             b = 100 * nums[l] + 10 * nums[m] + nums[n]
  16.                                             t = a * b
  17.                                             if t > max:
  18.                                                 max = t
  19.                                                 num1 = a
  20.                                                 num2 = b
  21. print(num1, "×", num2, "=", max)
  22.                                             
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 23:24:48 | 显示全部楼层
  1. def sort_output(digit_chose):
  2.     digit_chose.sort(reverse = True)
  3.     num = 0
  4.     for each in digit_chose:
  5.         num = num * 10 + each

  6.     return num

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

  9. dl = [4, 5, 6, 7, 8, 9]
  10. former = 0

  11. for i in range(4, 10):
  12.     for j in range(i, 10):
  13.         for k in range(j, 10):
  14.             if i != j and i != k & j != k:
  15.                 digit_chosen = [i, j, k]
  16.                 other_num = del_digit(dl, digit_chosen)
  17.                 product = sort_output(digit_chosen) * sort_output(other_num)
  18.                 if product > former:
  19.                     former = product
  20.                     factor1 = sort_output(digit_chosen)
  21.                     factor2 = sort_output(other_num)

  22. print('%d × %d = %d' %(factor1, factor2, former))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 10:22:45 | 显示全部楼层

,老大!好牛!,但对于刚刚接触python的我来说,看不懂,。但是你的代码给我指明了方向和目标,非常感谢大佬支持!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 10:27:59 | 显示全部楼层

谢谢  大佬支持,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 11:28:14 From FishC Mobile | 显示全部楼层
judybbq 发表于 2022-8-11 10:22
,老大!好牛!,但对于刚刚接触python的我来说,看不懂,。但是你的代码给我指明了方 ...

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

使用道具 举报

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

是的 是的 !! 我就是同意你的观点, 所以才是方向和目标
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 10:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表