python之顺序取数

文章讲述了如何利用编程解决找寻三个不同数之和为2024的组合问题,通过循环和优化减少计算量。
摘要由CSDN通过智能技术生成

取三个不相同的数,要求和为2024,一共有多少种情况

三个不一样的数,一定有大有小,所以可以直接暴力搜索,三个for循环分别搜索三个数,三个数大小为i<j<k

ans = 0
for i in range(1, 2024):
    for j in range(i + 1, 2024):
        for k in range(j + 1, 2024):
            if i+j+k == 2024:
                ans = ans + 1

print(ans)#340370

 确定了两个数并且和为2024就能确定第三个数为2024-i-j,可以减少一个for循环遍历,但是需要保证2024-i-j是最大的,不然会有重复的情况

ans = 0
for i in range(1, 2024):
    for j in range(i + 1, 2024):
        if (2024 - i - j) > j:
            ans = ans + 1

print(ans)    # 340370

还可以进行剪枝,2024/3=674.6,最小的数一定小于平均数,所以i的范围可以缩小到1到674,第二小的数最大的时候是当最小的数取1时,剩下两个数和为2023,2023/ 2=1011.5,所以第二小的数范围可以缩小到i到1011

ans = 0
for i in range(1, 675):
    for j in range(i + 1, 1012):
        if (2024 - i - j) > j:
            ans = ans + 1

print(ans)  # 340370

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Genius256

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

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

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

打赏作者

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

抵扣说明:

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

余额充值