python解决小学数学题

  [] []
X    []
-----------
  [] []
+ [] []
-----------
  [] []

题目中一共9个数,分别为1到9,并且没有重复。

第一种解法:

那么这9个数我分别记为A,B,C,D,E,F,G,H,I,每个字母代表一个19之间的数,根据题意不同字母所代表数字不同。

那么可以转化为以下 式子:

AB * C = DE
DE + FG = HI
'''


arr = [1,2,3,4,5,6,7,8,9]

for a in arr:
    for b in arr:
        if b == a:  continue
        for c in arr:
            if c in [a, b]: continue
            de = (a * 10 + b) * c
            d = de // 10
            e = de % 10
            if d >= 10 or d == 0: continue
            if e == 0: continue
            if d in [a,b,c,e]: continue
            if e in [a,b,c,d]: continue
            for f in arr:
                if f in [a,b,c,d,e]: continue
                for g in arr:
                    if g in [a,b,c,d,e,f]: continue
                    hi = de + f * 10 + g
                    h = hi // 10
                    i = hi % 10
                    if h >= 10 or h == 0: continue
                    if i == 0: continue
                    if h not in [a,b,c,d,e,f,g,i] and i not in [a,b,c,d,e,f,g,h]:
                        print("this is the correct answer: ", a,b,c,d,e,f,g,h,i)


'''
this is the correct answer:  1 7 4 6 8 2 5 9 3
'''

第二种解法:其实只是优化了下代码。

那么这9个数我分别记为A1,A2,B,C1,C2,D1,D2,E1,E2,每个字母代表一个19之间的数,根据题意不同字母所代表数字不同。

那么可以转化为以下 式子:
  A1 A2
X    B
---------
  C1 C2
+ D1 D2
---------
  E1 E2

A1A2 * B = C1C2
C1C2 + D1D2 = E1E2
'''


def diff(a, b):
  '''计算两个集合的差集,相当于第一个集合减去两个集合的交集。
      例如输入 a=[1,2,3,4], b=[3,5], 则会返回[1,2,4]
  '''
  return list(set(a).difference(set(b)))


arr = [1,2,3,4,5,6,7,8,9]

for a1 in arr:
    for a2 in diff(arr, [a1]):
        for b in diff(arr, [a1, a2]):
            c1c2 = (a1 * 10 + a2) * b
            c1 = c1c2 // 10
            c2 = c1c2 % 10
            if c1 >= 10 or c1 == 0 or c1 in [a1,a2,b,c2]: continue
            if c2 == 0 or c2 in [a1,a2,b,c1]: continue
            for d1 in diff(arr, [a1,a2,b,c1,c2]):
                for d2 in diff(arr, [a1,a2,b,c1,c2,d1]):
                    e1e2 = c1c2 + d1 * 10 + d2
                    e1 = e1e2 // 10
                    e2 = e1e2 % 10
                    if e1 >= 10 or e1 == 0 or e1 in [a1,a2,b,c1,c2,d1,d2,e2]: continue
                    if e2 == 0 or e2 in [a1,a2,b,c1,c2,d1,d2,e1]: continue
                    print("this is the correct answer: ", a1,a2,b,c1,c2,d1,d2,e1,e2)


'''
this is the correct answer:  1 7 4 6 8 2 5 9 3
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张欣-男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值