2017-05-23 16 views
-1

私はCollat​​z問題にリンクしているタスクを解決しています。長さが最も長いArrayListを比較して見つける

public static void sequence(int value) 
     { 
      ArrayList<Integer> calc = new ArrayList<Integer>(); 
     calc.add(value); 

while(value != 1) 
    { 

      if(value % 2 == 0) 
      { 
       value = value/2; 
      } 

      else if(value % 2 != 0) 
      { 
       value = (value * 3) + 1; 
      } 

      calc.add(value); 

      if(value == 1) 
      { 
        System.out.println(calc); 
       } 
     } 
    } 

    public static void main(String[] args) { 
     for(int x = 1000000; x > 0; x--) 
     { 
     sequence(x); 
     } 
    } 

} 

私のタスクの次の部分は、1,000,000以下の最長このCollat​​zシーケンスを見つける方法を見つけることです:私は、任意の開始番号から1を生産する方法を作成しました。

私は以下のようないくつかのソリューションを思いつきました。もちろん、どれも働いていませんでした。

while(value != 1) 
     { 

      if(value % 2 == 0) 
      { 
       value = value/2; 
      } 

      else if(value % 2 != 0) 
      { 
       value = (value * 3) + 1; 
      } 

      calc1.add(value); 

      if(calc1.size() > calc2.size()) 
      { 
       calc2 = calc1; 
      } 

     } 
     System.out.println(calc2); 
    } 

誰もが助け、2つの以上のArrayListの比較を使用して最長のこのCollat​​zシーケンスを見つけるための正しい方法を見つけることに私を案内してもらえます。 ArrayListを使用するよりも優れたオプションがある場合は、これらのメソッドを歓迎します。おかげさまで

+0

メソッド 'calc'と変数' calc'( 'calc'という名前はベストではありません)を持つのは混乱します。 –

+0

@ C-Otto重複を指摘してくれてありがとう、私は気づいていない。そして、ArrayListの名前calcについては、これの問題は何ですか? –

+0

まず、「計算」または「計算された」の略語です。短くする必要はないので、省略しないでください。そして、この名前は計算されたものを示しません。 'calculateCollat​​z'や' computeCollat​​zList'や 'collat​​zSequence'のような名前は、意味を伝えて他の人がコードを理解できるようにするよりも、より良い名前かもしれないと思います。 –

答えて

0

最長シーケンスで更新されるmaxListを維持する必要があります。

各呼び出しでcalc()メソッドに渡すか、calc()main()メソッドの上で使用するためのクラス変数として宣言できます。終わり

// to update the max list 
maxList = (list.size() > maxList.size()) ? list : maxList; 

結果だけ

System.out.println(maxList.size()); 
System.out.println(maxList); 

更新印刷:あなたはcalc()方法で数値を渡すための効率的な方法を把握する必要があります。
大きい入力の場合はjava.lang.OutOfMemoryErrorがスローされます。

+0

コードでは、ループに '100000'の値を使用しています。この値では、解決策は出力を生成しました。しかし、私はそれを必要な1,000,000に変更したとき、もはや働かなかったのですか? –

関連する問題