2 回答

TA贡献1873条经验 获得超9个赞
检查[减去瓦尔]是正确的方法。
public static int recaman(int n)
{
int[] seq = new int[n];
boolean[] check = new boolean[10 * n];
seq[0] = 0;
check[0] = true;
for (int k = 1; k < n; k++)
{
int minusVal = seq[k - 1] - k;
int plusVal = seq[k - 1] + k;
if ((minusVal > 0) && (!check[minusVal]))
{
seq[k] = minusVal;
check[minusVal] = true;
} else
{
seq[k] = plusVal;
check[plusVal] = true;
}
}
return seq[n - 1];
}

TA贡献1789条经验 获得超10个赞
对于 和 你检查 .这是错误的原因。似乎你也需要制作。希望它有帮助!k=16minusVal = 104!check[seq[minusVal]]int[] seq = new int[n * 10];
PS.我测试了它,但仍然有相同的错误。一般来说,这种情况是错误的,并可能导致错误的结果。您应该将其替换为,因为您要检查以前是否存在,而不是 。int[] seq = new int[n * 10];!check[seq[minusVal]]!check[minusVal]MinusValseq[minusVal]
此代码对我来说没有错误:
public class HelloWorld {
public static int recaman(int n){
int[] seq = new int[n * 10];
boolean[] check = new boolean[10 * n];
seq[0]=0;
check[0]=true;
for(int k=1;k<=n;k++){
int minusVal = seq[k-1]-k;
int plusVal = seq[k-1] + k;
if((minusVal>0)&&(!check[minusVal])){
seq[k]= minusVal;
check[minusVal] = true;
}else{
seq[k] = plusVal;
check[plusVal]=true;
}
}
return seq[n];
}
public static void main(String[] args) {
System.out.println("Hello World!");
recaman(100000);
}
}
添加回答
举报