私はJavaの課題に取り組んでいますが、完全に困惑しています。
質問は:
Recursion を使用して次のことを行う関数を作成します。 X 枚の異なるカードがあります。Y 個の封筒しかありません。Y は X 以下です。X と Y の任意の値について、
順序が重要ではなく、繰り返しが許可されていない場合に、Y エンベロープを埋めることができるすべての可能な方法を表示します。
hint: X! / (( X-Y)! * Y!)
順序が重要であり、繰り返しが許可されている場合に Y エンベロープを満たすことができるすべての可能な方法を表示します
hint: X^Y
順序が重要で繰り返しが許可されていない場合に、Y エンベロープを埋めることができるすべての可能な方法を表示します。ヒント:
X! / (X – Y)!
順序が重要ではなく、繰り返しが許可されている場合に、Y エンベロープを埋めることができるすべての可能な方法を表示します。ヒント:
(X + Y – 1)! / (Y! * (X – 1)!)
たとえば、ケース (1) の場合if X = {J, Q, K, A) and Y = 3
、出力は次のようになります。{J,Q,K} {J,Q,A} {J,K,A} {Q,K,A}.
誰にもコードを投稿してほしくありません。また、これを解決してくれる人も探していません! 最初の部分 (質問 a) が完了したら、水門のロックが解除されることを願っています。誰かが疑似コードアルゴリズムを作成する際にいくつかのガイダンスを提供してもらえますか?これは私が得ることができる限りです:
Y の封筒を順番に増加するカードで(ex: X=5, Y=3) {1, 2, 3}.
満たす 最高の封筒を最高のカードと交換し、{1, 2, 5}
元の値が見つかるまで減少させます{1, 2, 4}
。最高から最低までのすべてのエンベロープに対してこれを行います (番号がまだ使用されていない場合)。{1, 5, 4} {1, 3, 4} {5, 3, 4} {2, 3, 4}.
これは3つの組み合わせが欠落しているため、バラバラになる前に私が得る限りです{1, 5, 3} {3, 4, 5} {5, 3, 2}.
助けていただければ幸いです。これは繰り返し行う課題であるため、解決策は必要ありません。自分で解決策にたどり着くための助けが必要です。ありがとうございました!
編集:概要を説明した3つのソリューションすべてを試しましたが、まだ取得できません。これは私がこれまでに得たものです:
public static void comboNoRep(String[] a, int y, boolean[] used)
{
if(y == 0) {
// found a valid solution.
System.out.println(result);
}
for(int i=0; i<a.length; i++) {
if(!used[i]) {
used[i] = true;
result = result + a[i];
comboNoRep(a, y - 1, used);
result = result + " ";
used[i] = false;
}
else {
}
}
}
誰かが私の欠陥を指摘するのを助けることができますか?