3个递推和递归题目:紧密数、排队问题、表达式计数

这篇博客探讨了三个递推和递归问题:1) 紧密数的计算,通过分析相邻字符的差值限制,给出递推公式并提供代码实现;2) 排队问题,解决不同高度的人排列组合计数,给出了计算方法;3) 表达式计数,基于正确括号表达式的定义,计算特定长度和深度的括号组合数。
摘要由CSDN通过智能技术生成

1.紧密数

给出一个数字字符集{0, 1, ... , k}, 0 <= k <= 9 .如果由这个集合上的字符组成长度为n的数字中,任意相邻的字符数字差不超过1,则称该数为紧密的。如k=4,n=5时,12343就是一个紧密的数,而12340不是一个紧密的数。

    输入2个整数k与n,1 <= n <= 100.输出由字符集{0,1, ... , k}构成的长度为n的紧密数个数占长度为n的数字总数的百分比,精确到小数点后5位。

样例输入               样例输出

4 1                        100.00000

2 5                       40.74074

3 5                       17.38281

8 7                       0.10130


分析:如果第一个数为0或者k,那么第二个数都只有两种可能——0,1或者k-1,k。如果第一个数为j(0<j<k),那么第二个数有三种可能——j-1,j, j+1.

若用 cnt[i-1][j] 表示当前第i个数取j的可能数,那么cnt[0][j] 都为1。依上分析,cnt[1][0] = cnt[0][0] + cnt[0][1] ,cnt[1][k] = cnt[0][k-1][k+1],cnt[1][j] &

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值