Python程序员面试算法宝典---解题总结: 第7章 排列组合与概率 7.6 如何组合1,2,5这三个数使其和为100

本文是Python程序员面试中关于算法的解题总结,聚焦第7章排列组合与概率问题。探讨如何通过1, 2, 和5这三个数进行组合,使得它们的和达到100,揭示了组合与概率在编程面试中的应用。" 111737096,8422068,使用docker安装与配置gitlab-runner,"['Docker', 'GitLab', 'CI/CD', 'Maven']
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第7章 排列组合与概率 7.6 如何组合1,2,5这三个数使其和为100

题目:
求出用1,2,5这三个数不同个数组合的和为100的组合个数。为了更好地理解题目的意思,
下面给出几组可能的组合: 100个1,0个2和0个5,它们的和为100;
50个1,25个2,0个5的和也是100;50个1,20个2.2个5的和也为50

分析:
最简单的方式暴力破解,
5的个数只能从0~20中选取,假设当前取值为i
2的个数是:0~(100-5i)/2,假设当前取值为j
1的个数是:0~(100-5i-2j)/1,假设当前为k。
则使用三重循环可以求解出所有的情况。

关键:
1 书上解法
分析规律:
x + 2y + 5z = 100
所以 x + 5z = 100 -2y
所以有: x + 5z是偶数,且 x + 5z <= 100
当z=0,x取值为0,2,4,,,100,个数为(100+2)/2
当z=1,x取值为0,2,4,...,95,个数为(95+2)/2
...
当z=20,x取值为0,,个数为(0+2)/2
所以总共有
count=0
while m <= n:
    count += (m + 2) / 2
    m += 5

2 没有想到
通过x + 2y + 5z = 100
转换得到:
x + 5z = 100 -2y
确认 x + 5z为偶数,至此,通过不断分析z的大小,找出x的取值范围,
牛逼。

参考:
P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值