写这篇文章主要是因为网上搜索到的都是用c++语言写的所以在这里补充一下Java写的代码
问题描述
给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
a1 = 1
a2 = k
a3 = a1+a2
a4 = k^2
a5 = a1 + a4
a6 = a2 + a4
a7 = a3 + a4
a8 = k^3
a9 = a1 + a8
a10 = a2 + a8
a11 = a3 + a8
a12 = a4 + a8
...
a16 = k^4
a17 = a1 + a16
....
就可以很清晰的知道规律
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int n = sc.nextInt();
long[] dp = new long[n+1];
long k = 0;
long flag = 0;
for (int i = 1; i < n+1; i++) {
if (i == Math.pow(2, k)) {
dp[i] = (long) Math.pow(a, k);
k++;
} else if (i>flag) {
for (int j = 0; j < i - 2 && (i + j) < (n + 1); j++) {
dp[i + j] = dp[j + 1] + dp[i - 1];
flag = i + j;
}
}
}
System.out.println(dp[n]);
}
}