You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于计算5位"好数"个数的解法疑问

关于计算5位“好数”个数的解法疑问

嘿,我马上能看出你的问题所在——你用星星和 bars 的思路出发点是对的,但漏掉了一个核心限制:每个数位上的数字只能是1-9(毕竟是单个数字,最大不能超过9)。当你把剩下的12分配到5个数位时,会出现某些数位分配后数字超过9的无效情况,这些得从总数里减掉!

具体拆解一下:

  • 你最初的步骤:先给每个数位分1,把问题转化为“将12分配到5个数位”的非负整数解问题,用星星和 bars 算出C(12+5-1, 5-1)=C(16,4)=1820,这一步得到的是所有可能的分配数,但其中包含了违反数字上限的情况——比如某个数位额外分配了9或更多,那原数位的数字就变成1+9=10,这显然不是合法的单个数字。
  • 接下来用容斥原理剔除无效解:
    • 先算“至少有一个数位数字超过9”的情况:假设某一个数位额外分配了≥9的数,我们把这个数减去9,转化成新的非负整数分配问题。此时需要分配的总和变成12-9=3,对应的非负整数解数量是C(3+5-1,5-1)=C(7,4)=35
    • 总共有5个数位可能出现这种超上限的情况,所以无效解的总数是5×35=175。
    • 有没有可能两个数位都超过9?那需要额外分配的总和至少是9+9=18,但我们只有12可以分配,显然不可能,所以不用考虑这种多数位超标的情况。
  • 最后,合法的“好数”数量就是总数减去无效解:1820-175=1645,这就和正确答案一致啦!

备注:内容来源于stack exchange,提问作者Amritraj Lamba

火山引擎 最新活动