X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....
那么最终派往W星的观察团会有多少种国别的不同组合呢?
下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:
DEFFF
CEFFF
CDFFF
CDEFF
CCFFF
CCEFF
CCDFF
CCDEF
BEFFF
BDFFF
BDEFF
BCFFF
BCEFF
BCDFF
BCDEF
....
1 package Lottery; 2 3 public class Main { 4 public static void main(String args[]){ 5 int[] a = {4,2,21,1,3}; 6 //k已选人数,n还需要选的人数 7 forward(a,0,5,""); 8 } 9 public static void forward(int[] a,int k,int n,String s){ 10 if(k==a.length){ 11 if(n==0){ 12 System.out.println(s); 13 } 14 return ; 15 } 16 for(int i = 0 ;i < a[k] ;i++ ){ 17 forward(a , k+1 , n-i,s); 18 s+=(char)(k+'A'); 19 } 20 } 21 }