K进制数

题目描述
考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 

例: 
1010230 是有效的7位数 
1000198 无效 
0001235 不是7位数, 而是4位数. 

给定两个数N和K, 要求计算包含N位数字的有效K-进制数的总数. 

假设2 <= K <= 10; 2 <= N; 4 <= N+K <= 18.

输入
两个十进制整数N和K

输出
十进制表示的结果

样例输入
2
10
样例输出
90
//K进制 递推牛逼 
#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;
} 
View Code

不能连续两个0 与第一位不能为0,存在递推关系

实际上是一个深搜问题   dfs

1.最高位不能是0

#include<iostream>
using namespace std;

int n,k;//n是位数,k是进制数
char s[20];
int total;
void dfs(int cur){
    char temp;
    if(cur==n)
        total++;
    else
        for(int i=0;i<k;i++){
            temp = i+'0';
            if((cur==0 && temp == '0') || (temp == '0' && s[cur-1] == '0'))
                continue;
            s[cur] = i+'0';
            dfs(cur+1);
        }
}

int main(){
    cin>>n>>k;
    dfs(0);
    cout<<total<<endl;
}
View Code

 

posted @ 2019-03-15 15:57  Hello_World2020  阅读(450)  评论(0编辑  收藏  举报