求1到(10^N - 1)中9的个数

题意:

求1到(10^N - 1)中9的个数,其中视99这个数出现9的个数为2次。

 

最初,一看到此题,便联想到《编程之美》上的1的个数那道题。但是推起来诸多麻烦。

 

 

xj给了个good Ideal

规律可循,

10^N-1,这个数很特别。

 

考虑1-9, 其中1,2,3,...9每个数分别出现一次

稍微变形0-9,其中0,1,2,3...9每个数同样只出现一次

 

0-99

也能发现1,2,3....9出现的次数是一样多的,而0却只出现10次。

不过我们可以如此考虑问题

0-9

变形为00,01,02,03,.....09

这么看的话,0,1,2,3,.....9出现的次数都是一样多了,均为20次。

 

不难发现10^2 * 2/10 = 20

 

同理

0到10^N-1中九出现的个数为

10^6 * 6/10 = 10^5 * 6 = 600000

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以通过多种方法求解H(z)的差分方程,其一种比较简单的方法是使用部分分式分解和反变换。具体步骤如下: 1. 对于分母1 + a1z^(-1) + a2z^(-2) + a3z^(-3),先出其根: z1 = a1 z2,3 = (-a1 ± sqrt(a1^2 - 4a2)) / 2 z4,5 = (-a1 ± sqrt(a1^2 - 4a3)) / 2 2. 根据根的个数和性质,将H(z)分解成多个部分分式: H(z) = [A/(1-z1z^(-1))] + [B/(1-z2z^(-1))] + [C/(1-z3z^(-1))] + [D/(1-z4z^(-1))] + [E/(1-z5z^(-1))] 其A、B、C、D、E是待系数。 3. 将每个部分分式展开,得到: H(z) = [A/(1-z1z^(-1))] + [B/(1-z2z^(-1))] + [C/(1-z3z^(-1))] + [D/(1-z4z^(-1))] + [E/(1-z5z^(-1))] = A[1 + z1^(-1)z^(-1) + z1^(-2)z^(-2) + ...] + B[1 + z2^(-1)z^(-1) + z2^(-2)z^(-2) + ...] + C[1 + z3^(-1)z^(-1) + z3^(-2)z^(-2) + ...] + D[1 + z4^(-1)z^(-1) + z4^(-2)z^(-2) + ...] + E[1 + z5^(-1)z^(-1) + z5^(-2)z^(-2) + ...] 4. 对于每一项,提取其系数,得到: A = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) B = b0 + b1z2^(-1) + b2z2^(-2) + b3z2^(-3) C = b0 + b1z3^(-1) + b2z3^(-2) + b3z3^(-3) D = b0 + b1z4^(-1) + b2z4^(-2) + b3z4^(-3) E = b0 + b1z5^(-1) + b2z5^(-2) + b3z5^(-3) 5. 将每个系数代回到部分分式展开式,得到: H(z) = [b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3)] / [1 - z1z^(-1)] + [b0 + b1z2^(-1) + b2z2^(-2) + b3z2^(-3)] / [1 - z2z^(-1)] + [b0 + b1z3^(-1) + b2z3^(-2) + b3z3^(-3)] / [1 - z3z^(-1)] + [b0 + b1z4^(-1) + b2z4^(-2) + b3z4^(-3)] / [1 - z4z^(-1)] + [b0 + b1z5^(-1) + b2z5^(-2) + b3z5^(-3)] / [1 - z5z^(-1)] 6. 对于每一项,可以使用Z变换的反变换得其差分方程,例如: [b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3)] / [1 - z1z^(-1)] = B(z) / A(z) 其A(z) = 1 - z1z^(-1),B(z) = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) 对A(z)做Z变换,得到: A(z) = 1 - z1z^(-1) = z^(-3) - z2z^(-4) - z3z^(-4) + z4z^(-5) + z5z^(-5) 对B(z)做Z变换,得到: B(z) = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) = b0 + b1z^(-1) + b2z^(-2) + b3z^(-3) / z1^3 根据线性时不变系统的性质,可以将系统的差分方程表示为: y(n) = b0x(n) + b1x(n-1) + b2x(n-2) + b3x(n-3) - a1y(n-1) - a2y(n-2) - a3y(n-3) 其x(n)表示输入信号,y(n)表示输出信号,a1、a2、a3、b0、b1、b2、b3是待系数。 将Z变换的结果反变换回时域,得到: A(z)y(z) = B(z)x(z) y(n) - z2y(n-1) - z3y(n-2) + z4y(n-3) + z5y(n-4) = b0x(n) + b1x(n-1) + b2x(n-2) + b3x(n-3) 这就是H(z)的差分方程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值