nums[i][j] 存的是i位数的时候,首位数字是j的K好数的数目,i从1位开始的结果,去算2位时的结果,去算3位时的结果。。。最后得到l位的结果。K进制只是一个范围。
1 import java.util.Scanner; 2 public class _3K好数 { 3 public static void main(String[] args) { 4 long l,sum=0; 5 long[][] num = new long[500][500]; 6 int k; 7 Scanner scanner = new Scanner(System.in); 8 k = scanner.nextInt(); 9 l = scanner.nextInt(); 10 //不管多少进制,1位数字的只有一个 11 for (int i = 0; i < num.length; i++) { 12 num[i][1] = 1; 13 } 14 for (int j = 2; j <= l; j++) { 15 for (int i = 0; i < k; i++) { 16 for (int p = 0; p < k; p++) { 17 if (Math.abs(p-i)!=1) { 18 num[i][j] += num[p][j-1]; 19 num[i][j] = num[i][j]%1000000007; 20 } 21 } 22 } 23 } 24 for (int i = 1; i < k; i++) { 25 sum += num[i][(int) l]; 26 sum %=1000000007; 27 } 28 System.out.println(sum); 29 } 30 }