0

これは、私のコースの1つでの宿題に関するプログラミングの質問です。私は2、3年プログラムを作成しておらず、そもそもそれほど素晴らしかったです。現在、速度を上げるためにチュートリアルを行っていますが、しばらく時間がかかります。あなたたちがこの問題で私を助けることができれば、私は本当にそれをいただければ幸いです。

制約:

このシーケンスの各項は、次の形式の正の整数2^i*3^j*5^kですi, j, and ki + j + k >= 1.

配列は使用できません。この問題を解決するためのアルゴリズムには、リストの作成とマージを繰り返す必要があります。具体的には5 lists; a final list, temp list, and three term lists

「最終的なリストは、現在の一時リストとマージされることによって大きくなります。一時リストは、3つの用語リストのマージによって置き換えられます。新しい用語リストは、新しい一時リストに2, 3, and 5 respectively「」を掛けることによって生成されます。

目的のシーケンスは次のようになります。2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, . . .

4

1 に答える 1

1

質問で説明したように、アルゴリズムを再帰的に実行する場合があります。

ステップnで:

最終的なリストはセットを表しますF(n) = {m | m = 2^i*3^j*5^k, 1<=i+j+k<=n}

一時リストはセットを表しますT(n) = {m | m = 2^i*3^j*5^k, i+j+k=n}

次に、「L2」用語リストは次のようになります。L2(n) = 2*T(n-1)

「L3」用語リストはL3(n) = 3*T(n-1)

「L5」用語リストはL5(n) = 5*T(n-1)

Tを取得するには、T(n) = merge(L2(n), L3(n), L5(n))

Fを取得するには、F(n) = merge(F(n-1), T(n))

これを取得したら、2つのリストをマージする関数を実装する必要があります。main関数では、これらをJavaで翻訳する必要があります。

マージが簡単で効率的になるように、リストを常に並べ替えることもできます。Javaでは、LinkedListまたはArrayListを使用できると思いますが、どちらも正常に機能します。

結局のところ、それはあなたの宿題です。

于 2012-09-04T16:36:23.740 に答える