有趣的小东西
K-进制数
时间限制: 1Sec 内存限制: 128MB 提交: 268 解决: 101
题目描述
考虑包含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
下面是代码片段
import java.util.Scanner;
public class Main {
public static int N,K;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
N=in.nextInt();
K=in.nextInt();
int TopNum=K-1;
int Count=(int)Math.pow(TopNum,N);
for(int i=1;i<=(N/2+N%2);i++){//得到含有一个0,两个。。到N/2+N%2个0的数字的个数
int Kind=TwoCount(0,false,i,N-1);
Count+=Kind*(int)Math.pow(TopNum,N-i);
}
System.out.println(Count);
}
public static int TwoCount(int Count,boolean Mark,int Number,int Length){//Number 是剩下的0的个数,Length是剩下的数的位数
if(Number==1){
if(Mark)
Count+=Length-1;
else Count+=Length;
return Count;
}
if(Length<(2*Number-1))
return Count;
for (int i = 0; i <= 1; i++) {
if(i==1){
Count = TwoCount(Count, false,Number, Length-1);
}else if(Mark)
continue;
else if (i == 0)
Count = TwoCount(Count, true, Number-1,Length- 1);
}
return Count;
}
}