代码如下:
public class k好数 {
final static int Mod=1000000007;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int K=sc.nextInt();//输入K进制
int L=sc.nextInt();//输入L长度
int sum=0;
//横坐标是位数,纵坐标是进制
//表示l位以k结尾,从1号开始,k中表示1.2.3.···k-1
int[][] arr=new int[L+1][K];
for(int i=1;i<=L;i++){
for(int j=0;j<K;j++)
arr[i][j]=0;//先进行初始化
}
for(int i=0;i<K;i++){//使得第一行中,只有一位数的k好数为1,以K=4为例,0,1,2,3每个数都是只有1位的k好数
arr[1][i]=1;
}
for(int i=2;i<=L;i++){//每位
for(int j=0;j<K;j++){//每位中k的结尾,这说起来一点都不好理解,自己画图就理解了
for(int x=0;x<K;x++){
if(x!=j-1 && x!=j+1){//就是说不相邻
arr[i][j] += arr[i-1][x];//加上少一位的k的位数的值,先开始的初始值都为0;
arr[i][j] %=Mod;//进行余数计算
}
}
}
}
//把K=0的去掉,不加入sum的值
for(int j=1;j<K;j++){
sum +=arr[L][j];
sum%=Mod;
}
System.out.println(sum);
}
}