You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:求仅含0、1、2且2必在1之后的6位数字串数量

嘿,我来帮你理清楚这个问题!你之前的思路有点零散,咱们换个更清晰的方式来解这个题:

解法一:分状态递推法

我们可以把符合要求的6位数字串分成三类状态来统计:

  • A(n):n位串全是0(既没有1也没有2),这类串显然符合要求,因为没有2需要约束
  • B(n):n位串包含至少一个1,但没有2,这类串也符合要求,同样没有违反“2必须在1之后”的规则
  • C(n):n位串包含至少一个1和至少一个2,且所有2都出现在1之后,完全符合题目约束

接下来我们逐个推导这三类的数量:

  1. A(n)的计算:不管n是多少,全0的串只有1种,所以 A(6) = 1
  2. B(n)的递推:
    • 要得到n位的B类串,要么是在n-1位的全0串(A(n-1))末尾加一个1,要么是在n-1位的B类串末尾加0或1
    • 递推公式:B(n) = A(n-1) + 2*B(n-1)
    • 逐步计算到n=6:
      • B(1)=1(串"1")
      • B(2)=1 + 2*1=3(串"01","10","11")
      • B(3)=1 + 2*3=7
      • B(4)=1 + 2*7=15
      • B(5)=1 + 2*15=31
      • B(6)=1 + 2*31=63
  3. C(n)的递推:
    • 要得到n位的C类串,要么是在n-1位的B类串末尾加一个2(第一次引入2,且在1之后),要么是在n-1位的C类串末尾加0、1、2(已经满足约束,加任何数字都不违反)
    • 递推公式:C(n) = B(n-1) + 3*C(n-1)
    • 逐步计算到n=6:
      • C(1)=0(1位串不可能同时有1和2)
      • C(2)=B(1) + 3*0=1(串"12")
      • C(3)=B(2) + 3*1=3+3=6
      • C(4)=B(3) + 3*6=7+18=25
      • C(5)=B(4) + 3*25=15+75=90
      • C(6)=B(5) + 3*90=31+270=301

最后把三类数量相加,得到符合要求的6位数字串总数:
S(6) = A(6) + B(6) + C(6) = 1 + 63 + 301 = 365

解法二:总数量减去不符合条件的数量

我们先算所有由0、1、2组成的6位数字串总数:3^6 = 729

接下来找出不符合条件的串(即存在至少一个2出现在所有1之前,或者没有1但有2的串),分成两类:

  1. 没有1但有至少一个2的串:
    • 这类串每个位置只能是0或2,总共有2^6=64种,其中全0的1种是符合要求的,所以不符合的数量是64-1=63
  2. 有1和2,但所有2都在1之前的串:
    • 我们考虑第一个1出现在第k位(k从2到6):
      • 前k-1位只能是0和2,且至少有一个2,数量为2^{k-1}-1
      • 第k位是1,后面6-k位可以是0、1、2任意,数量为3^{6-k}
    • 把k从2到6的情况相加:
      • k=2: (2^1-1)*3^4 = 1*81=81
      • k=3: (2^2-1)*3^3=3*27=81
      • k=4: (2^3-1)*3^2=7*9=63
      • k=5: (2^4-1)*3^1=15*3=45
      • k=6: (2^5-1)*3^0=31*1=31
    • 这类不符合的总数是81+81+63+45+31=301

把两类不符合的数量相加:63+301=364

最后用总数量减去不符合的数量,得到符合要求的串数:729-364=365

两种方法得到的结果一致,说明答案是对的!

内容的提问来源于stack exchange,提问作者MollyCooL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:17:00