设计c语言程序输出m个A,n个B可以组合成多少个不同排列的问题?

例如:2个A与2个B可以组成6种:AABBABABABBABAABBABABBAA... 例如:2个A与2个B可以组成6种:AABB ABAB ABBA BAAB BABA BBAA 展开
 我来答
随心E谈
2012-05-12 · TA获得超过1009个赞
知道小有建树答主
回答量:491
采纳率:50%
帮助的人:140万
展开全部
共有C(m+n,n)种可能,(C(X,Y)是组合数)
共有m+n个位置,从m+n个位置中选出n个位置,放B就可以了.
经过排序后得到:
AABB ABAB ABBA BAAB BABA BBAA
定义一个函数fun(char ch[]);
fun("AABB")等于"ABAB",
fun("ABAB")等于"ABBA",
……
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
long C(int m,int n);
char *next(char ch[],int n);//
void main()
{
int m,n,N;
char ch[100];
printf("请输入A的个数,B的个数\n");
scanf("%d %d",&m,&n);
N=C(m+n,n);
printf("共有%d种排列\n",N);

for(int i=0;i<m;i++)
ch[i]='A';
for(int i=m;i<m+n;i++)
ch[i]='B';

ch[m+n]='\0';

for(int i=0;i<N;i++)
{
printf("%s ",ch);
next(ch,m+n);
}
sytem("pause");

}
long C(int m,int n)
{
long x=1;
n= m-n< n ? m-n:n;
for(int i=1;i<=n;i++)
{
x=x*m--/i;
}
return x;
}
char *next(char ch[],int char_size)
{

int i,count=0;

for(i=char_size-1;i>0;i--)
{
if(ch[i]=='B'&&ch[i-1]=='A')break;
if(ch[i]=='B')count++;
}

ch[i]='A';
ch[i-1]='B';

for(++i;i<char_size;i++) ch[i]='A';

for(i=char_size-1;count-->0;i--) ch[i]='B';

return ch;
}
哥66319
2012-05-12
知道答主
回答量:9
采纳率:0%
帮助的人:3.3万
展开全部
先把m个A在m+n个 位置上进行排列,这时,有几种排序方式那就一共有几种排序方式,然后剩下的位置放B
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友26ad406
2012-05-11 · TA获得超过1611个赞
知道大有可为答主
回答量:1506
采纳率:100%
帮助的人:1082万
展开全部
只是要个数还是要把每种都列出来?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式