| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 730 人关注过本帖
标题:帮我思考下,要思考过成,答案我有,只是思路
只看楼主 加入收藏
刘路
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-23
收藏
 问题点数:0 回复次数:7 
帮我思考下,要思考过成,答案我有,只是思路
    计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域。但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。请完善它。


备注:四舍五入问题没有解决。 (m+n)!/ m!/n!


int f(int m, int n)
{
    if(m==0 || n==0) return 1;
    return _————————————_ ;
}
搜索更多相关主题的帖子: return 解决问题 计算机 答案 数学 
2011-05-24 17:23
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
其实这个问题困扰我很久了 我也是前两天才弄明白的

想了想其实很简单 首先,一共有m+n个数 那么他们的全排列

必然是(m+n)! 那么对于这个问题来说答案显然不是它

因为相同的元素互相交换不会产生 另一个不同的排列

那么一共有两类元素 个数分别是m n他们的全排列分别是m!和n!

所以不同的排列显然是 (m+n)!/ m! * n! 接下来举个例子

AAABB 前三个A的全排列为3!=6 后两个B的全排列为2!=2

如果在他们之间画一条线 也就是交换的过程中不能出现

A和B 交换 或者B和A交换 那么一共有3!*2!种

显然这12种排列都是AAABB 所以结果应该是5!/(3!*2!)

好啦 就说这么多 估计你能理解

                                         
===========深入<----------------->浅出============
2011-05-24 18:03
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
补充一下 同样的问题 如果是ABC 也就是三类分别有 n1 n2 n3个 那么

答案应该是什么呢  如果你理解了 肯定会很容易想到

(n1+n2+n3)!/(n1!* n2!*n3!)

                                         
===========深入<----------------->浅出============
2011-05-24 18:11
夜叶
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:189
注 册:2011-5-7
收藏
得分:0 
楼上正解
2011-05-24 18:53
qianyou
Rank: 3Rank: 3
来 自:江西南昌
等 级:论坛游侠
帖 子:76
专家分:189
注 册:2011-3-25
收藏
得分:0 
有点高中数学问题的味道...
2011-05-24 20:53
mindme
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2011-4-18
收藏
得分:0 
个人觉得,楼主是想问为什么要用,(m+n)!除以(m!)*(n!).我也不知道为什么。
2011-05-25 06:59
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
如果要输出所有的全排列,怎么做呢?

My life is brilliant
2011-05-25 08:30
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
C++的 STL 里面有
程序代码:
//stl 里面的全排列生成函数next_permutation
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int i;
int A[] = {0,1,2,3};
while(next_permutation(A, A+4)==true) //prev_permutation(A, A+4);
{
for(i=0;i<4;i++)
cout<<A[i]<<"\t";
cout<<endl;
}
}

                                         
===========深入<----------------->浅出============
2011-05-25 16:25
快速回复:帮我思考下,要思考过成,答案我有,只是思路
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025364 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved