位数问题

题目描述

在所有的N位数中,有多少个数中有偶数个数字3?

输入

读入一个数N(N≤15)

输出

输出有多少个数中有偶数个数字3。

样例输入

2

样例输出

73

算法分析

计算初始项

F 1 F_1 F1为只有一位数的时候,个位数填0,1,2,4,5,6,7,8,9,方案数量为9,即 F 1 F_1 F1=9

F 2 F_2 F2为当有两位数的时候的解,分两种情况讨论
情况1:十位填3
情况1.1:个位不填3,方案为0
情况1.2:个位填3,方案为1

情况2:十位不填3
情况2.1:个位不填3,方案数为8*9=72
情况2.2:个位填3,方案数为0
总方案数量为 F 2 = 72 + 1 = 73 F_2=72+1=73 F2=72+1=73
F2的情况

F 3 F_3 F3为有三位数时候的解
同样的,分情况讨论;
情况1:百位填3
意味着要得到十位和个位数奇数个3的方案数
情况2:百位不填3
意味着要得到十位和个位偶数个3的方案数量,即 F 2 F_2 F2的值

递推方程

因此,为了计算下一位的偶数个3的方案数量,我们还需要保存当前位为奇数个3的方案数量,因此可设
F ( i , 0 ) F(i,0) F(i,0)为第i位有偶数个3的方案数量
F ( i , 1 ) F(i,1) F(i,1)为第i位有奇数个3的方案数量
可得:
F(1,0)=9
F(1,1)=0
F(i,0)=F(i-1,1)+9*F(i-1,0) (假设当前位不是最高位
F(i,0)

F(i,1)=F(i-1,0)+9*F(i-1,1)
F(i,1)
注意: 在写程序时需要判断当前位是否为最高位,最高位不能填0

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值