张威计


私信TA

用户名:zhangweiji

访问量:2004

签 名:

等  级
排  名 32257
经  验 472
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 吉首大学
专  业

  自我简介:

题目描述:

         一个合法的n位K进制数定义如下: 它是一个首位不为0的K进制数。 它不包含连续的两个0。对于输         入的K,n。求出满足上述条件的K进制数个数。

解题思路:

         这个题应该是一个递推题。可以用f[i]表示i位(最高位是第i位)K进制数的总数,那么就应该有:f[i]=(f[i-1]+f[i-2])*(k-1)。

解释一下:f[i]也就是i位K进制数的总数应该等于:第i-1位为0与第i-1位不为0的情况的和乘以第i位的情况数(1..k-1)

(1)第i-1位为0的情况应该等于i-2位不为0的情况总数,即f[i-2]

(2)第i-1位不为0的情况应该等于f[i-1]

所以f[i]=(f[i-1]+f[i-2])*(k-1)



参考代码:

#include<stdio.h>
int k;
int f(int n)
{
    if(n == 1)
    {
        return k-1;
    }
    else if(n == 2)
    {
        return (k-1)*k;
    }
    else
    {
        return f(n-1)*(k-1) + f(n-2)*(k-1) ;    }
}
int main()
{
    int n;
    scanf("%d%d", &n, &k);
    printf("%d\n",f(n));
    return 0;
}

欢迎留言

 

0.0分

10 人评分

  评论区

n=3的时候是不是有问题哦
2020-02-24 11:38:29
递推公式 是正确,但证明过程不对。
1. 如果既有“可以用f[i]表示i位(最高位是第i位)K进制数的总数”又有“(2)第i-1位不为0的情况应该等于f[i-1]”,那么f[i]到底代表什么?
2. ”第i-1位为0与第i-1位不为0的情况的和乘以第i位的情况数(1..k-1)“,也完全没道理
按这种错误的思路谁都想不明白。
2019-11-24 21:25:02
不喷了 换下一家!
2019-10-12 20:23:30
硬是看不懂
2019-05-21 22:55:05
这个确实强的没啥话说
2019-04-17 20:27:23
除了6,不知道说什么好了
2019-03-19 20:49:21
66666666
2019-03-17 11:49:12
确实强
2019-01-12 15:17:40