1.一开始我做这道题的时候错误的理解了题的意思,其题意并不是一个十进制数转化为k进制数后看有没有连续的0,n代表的是位数,k代表的是k进制数。
2.题目不允许有前导零,但是我们能可以先按有前导零来考虑最后在删去前导零的情况。
3.很容易想到下面的递推公式,当第n位为零的时候,种数为第n-1去除前导零 即为 (k-1)*a【n-2】。第n位为非零的时候,种数为
(k-1)*a【n-1】 合起来为 a【n】=(k-1)*a【n-1】+(k-1)*a【n-2】;
4 a【n】删去前导零的情况
下面是我的代码:
#include <stdio.h>
int main()
{
int i,j,n,m,s,t;
int a[1000];
while(scanf("%d %d",&n,&m)!=EOF)
{
a[1]=m;a[2]=m-1+(m-1)*m;
for(i=3;i<=n;i++)
{
a[i]=(m-1)*a[i-1]+a[i-2]*(m-1);
}
if(n>2)
{
a[n]-=(m-1)*a[n-2];
}else if(n==2)
{
a[n]-=(a[n-1]-1);
}else if(n==1)
{
a[1]-=1;
}
printf("%d\n",a[n]);
}
return 0;
}