蓝桥杯每日一题(17):神奇算式(python)

该博客介绍了如何解决蓝桥杯竞赛中的一个数学问题,即找出由4个不同数字组成的乘法算式,其乘积仍由这4个数字构成。作者提供了两种解决方案,分别使用全排列算法排除首位为0的情况,并考虑乘法交换律,通过计数满足条件的算式数量来得出答案。最终得出的正确答案是12。
摘要由CSDN通过智能技术生成

Topic

由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。

Solution_1

利用全排列先将四位数字进行全排列
并将首位是0的情况进行排除

在正式判断前需提前考虑交换律
如果是三位数乘一位数
则只需在三位数乘一位数时在结果中加一
交换后变为一位数乘三位数则无需添加和判断
同时也避免了交换律的重复

之后就是正式的判断
对于三位数乘一位数
首先需要将排列的数字输出为三位数乘一位数字后的ans_1
为了判断“乘积仍然由这4个数字组成”需将四个数字设置成列表b
只要四个数字中在b中存在就在b中删除
当b完全为空则证明“乘积仍然由这4个数字组成”的要求
结果count + 1

对于两位数乘两位数
判断过程与三位数乘一位数相同
但是为了满足交换后仅计算一次的情况
需提前设置had列表
将满足条件的结果每次加入到had中
若ans_2不在had中则满足交换律仅计算一次的条件

最后输出count 的值即位结果

Code_1

import itertools

count = 0
a = itertools.permutations([i for i in range(0, 10)], 4)
had = []

for i in a:
    if i[0] == 0:
        continue

    b = list(str(i[0]) + str(i[1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值