java 组合问题_Java的组合排列问题

从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;}//回溯

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值