我想通过这种方式解决Project Euler Problem 12但是我遇到了一些问题,任何人都可以告诉我我在哪里犯错误。
**问题 -
通过添加自然数来生成三角数的序列。所以第7个三角形数字是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.前十个术语是:
1,3,6,10,15,21,28,36,45,55,......
让我们列出前七个三角形数字的因子:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
我们可以看到28是第一个超过五个除数的三角形数。
第一个三角形数的值超过500个除数是多少?
import java.util.ArrayList;
import java.util.List;
public class Problem12 {
int j=1;
static int num;
List<Integer> ls = new ArrayList<Integer>();
public void trangule(int i){
num= i*(i+1)/2;
while(j>0);
{
for(j =1; j<num/2; j++){
if(num%j==0)
{int temp= num/j;
ls.add(temp);
}
if(ls.size()==500)
{
System.out.println(ls.get(ls.size()-1));
}
}
}
}
public static void main(String[] args) {
Problem12 ob =new Problem12();
for(int i =1; i<=500; i++)
{ ob.trangule(i);}
}
}
答案 0 :(得分:2)
你有一个空语句while
循环:
while(j>0);
;
结束循环,因此它始终在条件j>0
上循环,这始终为真,因此代码永远不会超过该点。
我不确定while
循环首先是什么,即使您删除;
它仍然永远不会离开该循环。事实上,我认为你不需要它。
其他一些注意事项:
ls
,因此ArrayList
将继续累积所有三角形数字组合的因子(您可以使用ArrayList#clear执行此操作)