Я пытаюсь распечатать все возможности 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.
Я сделал функции, которые печатают то, что я хочу для 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