字串数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1877 Accepted Submission(s): 367
Problem Description
一个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
Source
Recommend
JGShining
code:
1 /* 2 设多重集的个数n = n1 + n2 + ... + nk; 3 则该多重集的排列个数为:n!/(n1!n2!...nk!). 4 */ 5 import java.util.*; 6 import java.math.*; 7 public class Main 8 { 9 public static void main(String []args) 10 { 11 Scanner cin=new Scanner(System.in); 12 int n; 13 int sum; 14 int []data=new int[27]; 15 BigInteger a,b; 16 while(cin.hasNext()) 17 { 18 n=cin.nextInt(); 19 if(n==0) 20 break; 21 sum=0; 22 for(int i=0;i<n;i++) 23 { 24 data[i]=cin.nextInt(); 25 sum+=data[i]; 26 } 27 a=BigInteger.valueOf(1); 28 for(int i=2;i<=sum;i++) 29 a=a.multiply(BigInteger.valueOf(i)); 30 for(int i=0;i<n;i++) 31 { 32 b=BigInteger.valueOf(1); 33 for(int j=2;j<=data[i];j++) 34 b=b.multiply(BigInteger.valueOf(j)); 35 a=a.divide(b); 36 } 37 System.out.println(a); 38 } 39 } 40 }