解题思路:ACM紫书 第十章 P319 有重复元素的全排列
答案: 所有数的和的阶乘 除以 每个数阶乘的乘积
因为给定 (26*12)! 会爆掉(long long),这里用java 的BigInteger.
import java.math.BigInteger; import java.util.Scanner; public class Main { public static BigInteger jc(BigInteger n) { if (n.compareTo(new BigInteger("1")) == 0) return new BigInteger("1"); else return n.multiply(jc(n.subtract(new BigInteger("1")))); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); if (n == 0) break; BigInteger[] numarr = new BigInteger[n]; BigInteger n1 = new BigInteger("0"); BigInteger sum = new BigInteger("1"); for (int i = 0; i < n; i++) { numarr[i] = sc.nextBigInteger(); n1 = n1.add(new BigInteger("" + numarr[i])); sum = sum.multiply(new BigInteger("" + jc(numarr[i]))); } System.out.println("" + jc(n1).divide(sum)); } } }