我試圖列出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, 4 5.在Java中打印所有可能的nCr組合
我做了打印我想要的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
參見[組合算法] [1] [1]:http://stackoverflow.com/questions/3346249/java-permutation-algorithm – ManojGumber
這僅適用於當您的r爲2。在我的例子不工作時,R = 2,但我希望它適用於任何r –