順序が重要でない場合の組み合わせであるnCrのすべての可能性を印刷しようとしています。したがって、5C1には5つの可能性があります:1、2、3、4、5。5C2には10の可能性があります:1 2、1 3、1 4、1 5、2 3、2 4、2 5、3 4、3 5 45。
r = 2、r = 3、r = 4の場合に必要なものを出力する関数を作成し、パターンを確認しましたが、変数rの有効なメソッドを作成できないようです。
public void printCombinationsChoose2(int n, int k) //for when k = 2
{
for (int a = 1; a < n; a++)
{
for (int b = a + 1; b <= n; b++)
{
System.out.println("" + a + " " + b);
}
}
}
public void printCombinationsChoose3(int n, int k) //for when k = 3
{
for (int a = 1; a < n - 1; a++)
{
for (int b = a + 1; b < n; b++)
{
for (int c = b + 1; c <= n; c++)
{
System.out.println("" + a + " " + b + " " + c);
}
}
}
}
public void printCombinationsChoose4(int n, int k) //for when k = 4
{
for (int a = 1; a < n - 2; a++)
{
for (int b = a + 1; b < n - 1; b++)
{
for (int c = b + 1; c < n; c++)
{
for (int d = c + 1; d <= n; d++)
{
System.out.println("" + a + " " + b + " " + c + " " + d);
}
}
}
}
}
public void printCombinations(int n, int k) //Doesn't work
{
int[] nums = new int[k];
for (int i = 1; i <= nums.length; i++)
nums[i - 1] = i;
int count = 1;
while (count <= k)
{
for (int a = nums[k - count]; a <= n; a++)
{
nums[k - count] = a;
for (int i = 0; i < nums.length; i++)
System.out.print("" + nums[i] + " ");
System.out.println();
}
count++;
}
}
ですから、私の最後のメソッドのレイアウトは正しいと思いますが、私が呼び出すとprintCominbations(5, 2)
、それが印刷されるので、私は正しいことをしていません。
1 2
1 3
1 4
1 5
1 5
2 5
3 5
4 5
5 5
5C2について前に言ったはずのとき。
編集
最後の例は悪かった。これは、それが間違っていることを説明するためのより良いものです:printCombinations(5, 3)
これを与えます:
1 2 3
1 2 4
1 2 5
1 2 5
1 3 5
1 4 5
1 5 5
1 5 5
2 5 5
3 5 5
4 5 5
5 5 5
どうすれば次のようになりますか。
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5