一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".
给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串.
给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串.
Input每组测试数据分两行,第一行为n(1<=n<=26),表示不同字母的个数,第二行为n个数A1,A2,...,An(1<=Ai<=12),表示每种字母的个数.测试数据以n=0为结束.
Output对于每一组测试数据,输出一个m,表示一共有多少种字符串.
Sample Input
2 1 2 3 2 2 2 0
Sample Output
3 90
代码:
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(true) { int n; n=sc.nextInt(); if(n==0) { break; } int sum=0; BigInteger ans=new BigInteger("1"); BigInteger ans1=new BigInteger("1"); int x; for(int t=1;t<=n;t++) { x=sc.nextInt(); sum+=x; for(int j=1;j<=x;j++) { ans=ans.multiply(BigInteger.valueOf(j)); } } for(int t=1;t<=sum;t++) { ans1=ans1.multiply(BigInteger.valueOf(t)); } ans1=ans1.divide(ans); System.out.println(ans1); } sc.close(); } }