K-进制数

题目描述

考虑包含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

提示

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<sstream>
#include<cstdlib>
#include<map>
using namespace std;
typedef long long ll;
double l,r;
bool ck(int n,int k)
{
    string ans="";
    char pre=' ';
    do
    {
        int t=n%k;
        if(t>=0&&t<=9)
        {
            if(t==0&&pre=='0')
                return false;
            ans+=t+'0';
            pre=t+'0';
        }
        else
            ans+=t-10+'a';
        n/=k;
    }
    while(n!=0);

}
int a[20];
int tot=0;
int n,k;
void DFS(int p)
{
    if(p==n)
    {
        tot++;
        return ;
    }
    for(int i=0;i<k;i++)
    {
        if(i==0&&p==0) continue;
        if(a[p-1]==0&&i==0) continue;
        a[p]=i;
        DFS(p+1);
    }
}
int main()
{
    cin>>n>>k;
    for(int i=0;i<20;i++)
        a[i]=0;
    tot=0;
    DFS(0);
    cout<<tot<<endl;
    return 0;
}

思路

这个题意.... 我理解错了

N位数字表示的数就是k进制数 而不是十进制数.

所以。。直接DFS搜吧。

原文地址:https://www.cnblogs.com/xxffxx/p/12002929.html