問題タブ [collatz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
217 参照

python - コラッツ予想数列を実行して、常に 1 で終わるかどうかを確認しようとしていますが、私の番号は 999 のままです。なぜですか?

これが私のコードです:

それは 999 まで機能し、無期限に続き、 を出力しGot one! 999、最終的に を上げますSegmentation Fault: 22。これを修正するにはどうすればよいですか?

0 投票する
2 に答える
1938 参照

java - Javaでの再帰メソッドによるメモ化

私は宿題に取り組んでおり、完全に疲れ果てています。私はプログラミングが初めてで、これが私の最初のプログラミングクラスです。

これが問題です:

Collat​​z.java の次の再帰関数について考えてみましょう。これは、コラッツ問題または 3n + 1 問題として知られる数論の有名な未解決の問題に関連しています。

たとえば、collat​​z(7) への呼び出しは、17 回の再帰呼び出しの結果として、シーケンス 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 を出力します。コマンド ライン引数 N を取り、collat​​z(n) の再帰呼び出しの数が最大になる n < N の値を返すプログラムを作成します。ヒント: メモ化を使用します。未解決の問題は、n のすべての正の値に対して関数が終了するかどうかを誰も知らないことです (再帰呼び出しの 1 つが引数のより大きな値に対するものであるため、数学的帰納法は役に立ちません)。

私はいくつかのことを試しました: for ループを使用する、メソッドが実行されるたびにインクリメントされる変数を使用して実行回数をカウントしようとする、および何時間もの単調な作業。

どうやら、メモ化で何らかの形で配列を使用することになっています。ただし、開始時に配列の長さを指定する必要がある場合に、配列を使用する方法がわかりません。

私は何か完全に間違っていますか?私は質問を誤解していますか?

これまでの私のコードは次のとおりです。これは、整数配列を作成しようとする試みを反映しています。

編集:

別のプログラムを書きました

次に、パイプを使用しました: %java Collat​​z2 6 | Java カウント

そしてそれはうまくいきました。

0 投票する
2 に答える
248 参照

c++ - 間違った答えを与える 3n+1 ソリューション

これは、間違った答えを出している 3n+1 問題に対する私の解決策です。私は過去 5 日間以来、この 1 つの静かさに何度も苦労してきました。私のソリューションの問題を理解するのを手伝ってください。私は末尾再帰を使用し、マップを保存して 2​​ のべき乗を追跡し、より迅速に答えに到達できるようにしています。問題へのリンクはProgramming Challenges - The 3n + 1 problemです

0 投票する
2 に答える
129 参照

c - collat​​z c コードの論理エラー

コードをコンパイルして実行するときに、「a」として 8 を入力すると、コンソールがクラッシュします。私はdev cを使用しています。私のひどい英語で申し訳ありませんが、十分に明確であることを願っています。

0 投票する
3 に答える
1932 参照

memoization - 錆びた複数の関数呼び出しで変数を存続させる

私はさびで再帰的なコラッツシーケンス関数をメモ化しようとしていますが、メモ化された値のハッシュマップが別の関数呼び出し間でその内容を保持する必要があります。さびでこれを行うエレガントな方法はありますか、それともメインでハッシュマップを宣言して毎回関数に渡す必要がありますか? 関数を呼び出すたびに、ハッシュマップが空のマップとして再宣言されていると思います。これが私のコードです:

余談ですが、HashMap にアイテムを挿入したり取り出したりするときに、& と * をすべて追加する必要があるのはなぜですか? コンパイラが文句を言っていて、それらを追加すると修正されたので、私はそれをしましたが、理由はわかりません。値で渡すことはできませんか?ありがとう。

0 投票する
0 に答える
272 参照

c++ - 逆コラッツ シーケンス コードが計算されない

C++ を使用して、1 から始まる最初の n 個の数値を取得し、それぞれの「パス カウント」を出力するプログラムを作成していました。コラッツ予想に関するウィキペディアの記事を参照してください)。たとえば、8 のパス番号は 3 です。これは、1 に到達するのに 3 つのステップが必要だからです (8 : 2 = 4; 4 : 2 = 2; 2 : 2 = 1)。

したがって、単純な関数があります。

次に、これの逆関数 (firstInstanceOf(n) と呼ばれる) を作成することにしました。この関数は、任意の特定の pathNumber の最初のインスタンスを 1 から昇順に計算します。たとえば、firstInstanceOf(3) は 8 になります。 pathCount が 3 の 1 から昇順の番号。私が書いた関数は次のとおりです。

ここで、s は入力値、i は毎回 1 ずつ増加する変数です。単純に見えますが、コードは警告なしでコンパイルされますが、計算は行われません。後者の関数を for ループ、無限ループなどとして再フォーマットしようとしましたが、それでもプログラムは無期限にバッファリングするか、偽の値を出力し続けます。非常に明白な何かが欠けているような気がしますか?どんな助けでも感謝します。

0 投票する
1 に答える
1158 参照

python - collat​​z グラフを作成するための実行時間の長い python スクリプト

私は、数がコラッツ予想を通過するのにかかる反復のグラフを作成するためのPythonスクリプトを作成しようとしています。この例では、非常に小さな範囲 (数値 1 のみ) のみを使用しましたが、このスクリプトは実行を続けているようで、10 分間実行した後でもグラフを生成しません。以下はコードです。何かアドバイス?

0 投票する
3 に答える
163 参照

perl - 将来の結果を予測しようとしています, collat​​z, Perl

私はコラッツシーケンスに取り組んでいます。現在、forループがあります。

そして、ループの回数 (理論を完成させるのに何回かかるか) を計算する簡単な方法があります。

簡単な理論を使って、コードをより速く作成できることを突き止めました。

n = 3 の場合、このシーケンスは {3,10,5,16,8,4,2,1} になります [8] n = 6 の場合、このシーケンスは {6,3,10,5,16 になります。 ,8,4,2,1} [9] n = 12 の場合、このシーケンスは {12,6,3,10,5,16,8,4,2,1} [10] になります。

したがって、3 の結果を保存し、カウントに 1 を追加するだけで 6 の結果を計算できるようにしたいと考えています。

私はこれに対処しようとしましたが、実際にはプログラムが完了するのに1分長くかかりました.以前の30秒ではなく1.49秒かかるプログラムがあります.

これは私がキャッシュを追加した方法です(おそらく間違っています)

以下はforループの外側です

次に、for ループの $i 行の 4 行目の後にあるこのコードのビットがあります。

コードを遅くすることなく正しくキャッシュする方法を理解する必要があるだけです。

0 投票する
2 に答える
182 参照

c - なぜ < は != よりもずっと速いのですか?

問題 : 数列を生成する次のアルゴリズムを考えてみましょう。整数 n で開始します。n が偶数の場合、2 で割ります。n が奇数の場合、3 を掛けて 1 を加算します。n の新しい値でこのプロセスを繰り返し、n = 1 で終了します。入力は、整数 i と i の一連のペアで構成されます。 j、1 行あたり 1 組の整数。すべての整数は 1,000,000 未満で 0 より大きくなります。入力整数 i と j の各ペアについて、i と j を入力に現れた順序で出力し、i と i を含む整数の最大サイクル長を出力します。 j. これら 3 つの数値は 1 つのスペースで区切られ、3 つの数値すべてが 1 行に表示され、入力の各行に対して 1 行の出力が表示されます。

サンプル入力:

出力例:

だから私はこれを書いた:

while(in>1)完全に問題ありませんが、サイクルメソッドを変更するwhile(in!=1)と、はるかに遅くなります。私の質問はなぜですか?

その時の時間while(in>1):0.683秒

そしてそのときwhile(in!=1):私は5分以上待っていましたが、まだ何も起こりませんでした:)

入力用 : 1 1000000

in1を下回ることはまったくできないため、無限ループなどはありません(そのためには、すでに1である必要があります)。

よろしくお願いします