蓝桥杯真题系列:C语言B组试题 D数的分解

用python解数的分解,我没有太好的方法python的循环效率很低导致一道简单的题需要大量的时间,本人用暴力法成功解题,耗费了大量的时间,这里放上代码

from tqdm import tqdm

list1 = []
count = 0
status = 0
for i in tqdm(range(1, 2020)):
    for i1 in str(i):
        if i1 == '2' or i1 == '4':
            status = 1
            break
    if status == 0:
        for j in range(1, 2020):
            for j1 in str(j):
                if j1 == '2' or j1 == '4':
                    status = 1
                    break
            if status == 0:
                for z in range(1, 2020):
                    for z1 in str(z):
                        if z1 == '2' or z1 == '4':
                            status = 1
                            break
                    if status == 0 and i + j + z == 2019 and {i, j, z} not in list1 and i != j and i != z and j != z:
                        list1.append({i, j, z})
                        count = count + 1
                    status = 0
            status = 0
    status = 0

print(count)
# 40785

这里的tqdm是一个进度条的外部库,对解题没有任何帮助,只是起到协助解题的作用(方便看计算进度),具体的思路很简单,生成三个在1到2019的数如果加起来等于2019就用一个集合记录下来(方便查重),又因为三个数不相等且都不含有2,4,故还需判断数的内容。暴力法有很多重复的运算,实际计算下来消耗时间18分钟,太慢了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值