java编程有n个红球,m个蓝球,k个绿球,同种颜色的球不作区分,把它们排成一行,几种方式

2025-03-13 09:27:23
推荐回答(1个)
回答1:

共有n+m+k个球,

  • 把所有可能列出来,假设每个球都不一样,所以有(n+m+k)! 种排列。

  • 红球的顺序为n!,黄球的顺序为m!,蓝球的顺序为k!。

  • 因为三种球除颜色外无区别,所以(n+m+k)!/(n!×m!×k!)即为所求。

代码为:

public class Main {

    /**
     * 求阶乘
     *
     * @param n
     * @return
     */
    public static int factorial(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }

        return n * factorial(n - 1);
    }


    /**
     * 求排列次数
     *
     * @param n
     * @param m
     * @param k
     * @return
     */
    public static int arrange(int n, int m, int k) {
        return factorial(n + m + k) / (factorial(n) * factorial(m) * factorial(k));
    }

    public static void main(String[] args) {
        // 各种颜色的球各一个共有6种排列方式
        System.out.println(arrange(1, 1, 1));
    }
}