1

この方法でプロジェクト オイラー問題 12を解決したいのですが、問題が発生しています。

**問題 -

三角形の数列は、自然数を加算することによって生成されます。したがって、7 番目の三角形の数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 になります。最初の 10 項は次のようになります。

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

最初の 7 つの三角形の数の因数を挙げてみましょう。

 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 は、約数が 5 を超える最初の三角形の数であることがわかります。

約数が 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);}

}

}
4

1 に答える 1

2

null ステートメントwhileループがあります。

while(j>0);

;ループを終了するためj>0、常に真である条件で常に循環しているため、コードはその時点を通過することはありません。

そもそもそのループが何whileのためにあるのかわかりません。削除;しても、そのループから離れることはありません。実際、私はあなたがそれを必要としないと思います。

その他の注意事項:

  • この問題で問われているのは、「約数が500を超える最初の三角形の数の値は?」というものです。最初に 500 を超えるものは、必ずしも 500 の約数を持つとは限りません。これが現在のチェックです。
  • ls反復間でクリアしていないため、ArrayList結合されたすべての三角形の数から係数を蓄積し続けます (これを行うにはArrayList#clearを使用できます)。
于 2013-02-28T06:42:45.693 に答える