问题描述
我在马蹄集上做题目,答案给的是C++版本,然后我用Java写的就有runtime error
代码
这是答案的
这是我的
import java.util.Scanner;
import java.util.*;
class Main {
// coin保存每一级硬币塔硬币总数的数组
// gold保存每一级硬币塔金币总数的数组
static long[] coin = new long[45];
static long[] gold = new long[45];
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// code here
int n = input.nextInt();
int i = input.nextInt();
coin[0] = 1;
gold[0] = 1;
for (int k = 1; k <= n; k++) {
coin[k] = coin[k-1] * 2 + k + 2;
gold[k] = gold[k-1] * 2 + k;
}
long result = find(n,i);
System.out.println(result);
input.close();
}
/**
* 求出在k级硬币塔中从下往上数i个硬币,一共有多少个金币
*
* @param k 硬币塔的级别
* @param i 从下往上数i个硬币
* @return 包含的金币的个数
*/
public static long find(long k, long i) {
if (0 == i) return 0;
if (0 == k) return 1;
if (1 == i) return 0;
if (i <= coin[(int) (k - 1)] + 1) return find(k - 1, i - 1);
if (i <= coin[(int) (k - 1)] + 1 + k) return gold[(int) (k - 1)] + i - (coin[(int) (k - 1)] + 1);
if (i <= 2 * coin[(int) (k - 1)] + 1 + k)
return gold[(int) (k - 1)] + k + find(k - 1, i - k - 1 - coin[(int) (k - 1)]);
return gold[(int) k];
}
}
这是运行结果
想请教一下大家哪里出了问题,感激不尽