如何将组合函数转换为置换函数?

时间:2013-12-19 16:03:22

标签: java algorithm combinations permutation

我正在开发一个单独的程序,它有一堆gui,所以我制作了一个更简单的程序,试图寻求帮助。

我真的不太了解permutationscombinations

无论如何,我在这里有一段代码可以解决这个问题:

F (n,r) = n!/(r!(n-r)!)

您可以更改代码中的n和r,它会为您提供这两个输入的答案。

public class peanuts
{

static int n,r;


public static void main (String[] args)
{

   n= 8;
    r=3;

  int m=1;

    if(n>>1 < r)
        r = n - r;
    for(int o=n+1-r;o<n+1;o++)
        m *= o;
    for(int o=r;o>0;o--)
        m /= o;
    Math.round(m);

      System.out.println ("C("+n+","+r+ ") is "+ m );
}}

我想略微修改它以解决这个排列函数:

F (n,r) = n!/(n-r)!)

2 个答案:

答案 0 :(得分:2)

删除除以r!的第二个for循环。

for(int o=r;o>0;o--)
  m /= o;

这会将m除以r!。删除此循环。

答案 1 :(得分:2)

计算排列的公式为:

F (n,r) = n!/(n-r)!

计算组合的公式为:

F (n,r) = n!/(r!(n-r)!)

所以你只需删除第二个for循环,在其中你用因子r除以,删除它:

for(int o=r;o>0;o--)
  m /= o;