Java的组合排列问题

小沐CA 2018-07-27 11:47:27
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+" ");
}
System.out.println();
}
for (int i = k; i < date.length; i++) {
{char t=date;date=date;date=t;}//试探
f(date,k+1);
{char t=date;date=date;date=t;}//回溯
}
}
}
...全文
297 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小沐CA 2019-04-29
  • 打赏
  • 举报
回复
分享的,看可不可以优化一下
yellingf 2019-04-28
  • 打赏
  • 举报
回复
楼主发这两个题目的目的是?让我们分析吗?
小沐CA 2019-04-28
  • 打赏
  • 举报
回复
我也头疼(´;︵;`)
youyiyang 2018-07-31
  • 打赏
  • 举报
回复
楼主,你的例子是不是在说明怎么用递归呢?你能不能再具体解释一下第2题的方法二,试探和回溯在这里是 什么意思呢?我没看懂
k10509806 2018-07-27
  • 打赏
  • 举报
回复
这种算法题看到就头疼

23,405

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧