3

Collat​​z Conjectureを実装するという Java の宿題をしているときに、最長の Collat​​z シーケンスを見つけるという別の目的を考えました。私のプログラムは次のようにステップを数えます:

public class Collatz {

static int count = 0;

    static void bilgi (int n){

        int result = n;
        System.out.println("Result: "+result+ " Step: "+count);

        if (result <= 1) {
            result = 1;
        } else if (result%2 == 0){
            result = result/2;
            count = count + 1;
            bilgi(result);

        } else {
            result = (result*3)+1;
            count = count + 1;
            bilgi(result);
        }
    }

    public static void main(String[] args) {
        bilgi(27);
    }

}

最高の歩数を見つけたい。

4

4 に答える 4

3
static int bilgi(int n) {
    int result = n;
    if (result <= 1) return 1;
    if (result % 2 == 0) return 1+bilgi(result/2);
    return 1+bilgi(3*result+1);
}

次に、呼び出しの結果を収集し、bilgi(i)最大値を選択します。

于 2012-11-02T07:46:18.533 に答える
2

1 億未満の最初の開始数の最長の進行は 63,728,127 で、949 のステップがあります。10 億未満の開始数の場合、986 ステップで 670,617,279 であり、100 億未満の数の場合、1132 ステップで 9,780,657,630 です。

ソース: http://en.wikipedia.org/wiki/Collat​​z_conjecture

于 2013-08-31T02:01:05.870 に答える
0

私はこれが古い質問であることを知っていますが、私はちょうどそれを解決していたので、配列リストを使用して .size() を取得するだけで、これを行う人に提案します。値も見たかったので、そのようにしました.

于 2016-06-27T02:35:03.247 に答える
0

1 から 100 までの最大値を探している場合は、次のように置き換えることができます。

public static void main(String[] args) {
    bilgi(27);
}

と :

public static void main(String[] args) {

    static int maxcountsofar = 0;
    static int start = 0;
    static int thisone = 0;
    for (int iloop = 1; iloop <= 100; iloop++)
    {
       thisone = bilgi(iloop);
       if (thisone > maxcountsofar)//if this one is bigger than the highest count so far then
      {
        start = iloop;//save this information as best so far
        maxcountsofar = thisone;
      }
    }
    System.out.println("Result: " + start.Tostring() + " Step: " + maxcountsofar.Tostring() );
    //I know this is a really old post but it looked like fun.

}

/* また、bilgi() 関数から println() を取り出すと、検出された各ステップに対して行が生成されますが、これは価値がなく、非常に時間がかかります。

Vesper の bigli() を使用してください。これは、あなたのものよりもはるかに高速であるためです。*/

于 2014-07-29T20:08:55.157 に答える