?
從4個人中選2個人參加活動,一共有6種選法。?從n個人中選m個人參加活動,一共有多少種選法?C(m/n)=C((m-1)/(n-1))+C(m/(n-1))數學算法
public class Main {public static void main(String[] args) {System.out.println("請輸入總人數:");Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.println("請輸入選擇人數:");int m=sc.nextInt();System.out.println("一共有"+fun(n,m)+"種方法!");} private static int fun(int n, int m) { if(m>n)return 0; if(m==0)return 1; return fun(n-1,m-1) + fun(n-1,m);}
}
2.
計算3個A,2個B可以組成多少種排列的問題(如:AAABB,?AABBA)是《組合數學》的研究領域?
。但有些情況下,也可以利用計算機計算速度快的特點通過巧妙的推理來解決問題。?
下列的程序計算了m個A,n個B可以組合成多少個不同排列的問題。請完善它。?
A(n/m)=A(n/(m-1))+A((n-1)/m)
?
方法一:
public class Main {public static void main(String[] args) {int m=3;int n=2;System.out.println(pailie(m, n));}public static int pailie(int m,int n){ if (m==0||n==0)return 1; return pailie(m-1,n)+pailie(m, n-1);}
}
方法二:
public class Main {public static void main(String[] args) {char[] date="ABC".toCharArray();f(date,0);}private static void f(char[] date, int k) {if (k==date.length) {for (int i = 0; i < date.length; i++) {System.out.print(date[i]+" ");}System.out.println();} for (int i = k; i < date.length; i++) {{char t=date[k];date[k]=date[i];date[i]=t;}//試探 f(date,k+1); {char t=date[k];date[k]=date[i];date[i]=t;}//回溯} }
}
?
?
?
原文鏈接:http://www.cnblogs.com/cy666/?