gpt4 book ai didi

java - 回文程序,无法终止循环,欧拉计划 #4

转载 作者:行者123 更新时间:2023-11-29 08:54:31 24 4
gpt4 key购买 nike

import java.util.ArrayList;
public class Euler4{
public static void main(String [] args){
int size = 0;
int product = 0;

for(int i = 102; i > 100; i--){
for(int j = 102; j > 100; j--){
ArrayList<Integer> digits = new ArrayList<Integer>();
product = i*j;
int index = 0;
while(product > 0){
digits.add(index,product%10);
product /= 10;
index++;
}
for(int element : digits)
System.out.println("digits :" + element);
size = digits.size() - 1;

if(test(0,size,digits)){
System.out.println("i and j " + i + " " + j);
break;
}
}
}
}

public static boolean test(int i, int size, ArrayList<Integer> digits){

if(digits.get(size).equals(digits.get(i))){

if(size == i || size - i == 1){
return true;

}else{
System.out.println("i: " + i + " size: " + size + " digits@i: " + digits.get(i) +" digits@size " + digits.get(i));
size--;
i++;

if(!test(i, size, digits))
return false;
}
}
return false;
}
}

这是输出:

digits :4 index: 0
digits :0 index: 1
digits :4 index: 2
digits :0 index: 3
digits :1 index: 4
digits :2 index: 0
digits :0 index: 1
digits :3 index: 2
digits :0 index: 3
digits :1 index: 4
digits :2 index: 0
digits :0 index: 1
digits :3 index: 2
digits :0 index: 3
digits :1 index: 4
digits :1 index: 0
digits :0 index: 1
digits :2 index: 2
digits :0 index: 3
digits :1 index: 4
i: 0 size: 4 digits@i: 1 digits@size 1
i: 1 size: 3 digits@i: 0 digits@size 0

我觉得while循环有问题,递归有问题。通过 test() 方法运行的值是进入数组的最后一组值,即 10201 因此即使 while 循环搞砸了,递归方法仍应返回 true。我不知道为什么不是。

问题是: http://projecteuler.net/problem=4

谢谢。

编辑:我将其修复以提高效率并提供最大回文数而不是仅列出回文数。如果有人感兴趣,这是 final :http://pastebin.com/qJUpZVzK

最佳答案

您第三次调用 test正在返回 true , 但你第二次调用 test没有使用该值。它落到方法的底部并返回 false , 当你真的想让它返回 true .

当您调用 test 时递归地,你想返回 true (来自 test )如果递归调用返回 true .

改变

if(!test(i, size, digits))  
return false;

靠近底部,到

return test(i, size, digits);

关于java - 回文程序,无法终止循环,欧拉计划 #4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940160/

24 4 0