关于排列组合方面的问题

kinglonghr 2004-05-08 03:10:57
如何用C语言实现p(M,N)排列 M个数中取N个排序。
C(M,N)组合M个数中取N个组合。
请大家指教谢谢了
...全文
30 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cngdzhang 2004-05-08
给个例子

#include <stdio.h>

/*10选4*/

#define MAXLEN 4
#define CHARACTER 10

char buf[MAXLEN+1];
char ch[CHARACTER];
int total;

void makep(int n) /*排列*/
{
int i;
if(n==MAXLEN)
{
buf[n]='\0';
printf("%s\n",buf);
total++;
}
else
{
for(i=0;i<CHARACTER;i++)
{
if(ch[i]==1) continue;
buf[n]=i+'A';
ch[i]=1;
makep(n+1);
ch[i]=0;
}
}
}

void makec(int s,int n) /*组合*/
{
int i;
if(n==MAXLEN)
{
buf[n]='\0';
printf("%s\n",buf);
total++;
}
else
{
for(i=s;i<CHARACTER;i++)
{
if(ch[i]==1) continue;
buf[n]=i+'A';
ch[i]=1;
makec(i+1,n+1);
ch[i]=0;
}
}
}

void main()
{
int i;
for(i=0;i<CHARACTER;i++)
{
ch[i]=0;
}
total=0;
makep(0);
printf("total=%d\n",total);

for(i=0;i<CHARACTER;i++)
{
ch[i]=0;
}
total=0;
makec(0,0);
printf("total=%d\n",total);
}
  • 打赏
  • 举报
回复
zhouqingyuan 2004-05-08
下面是求排列和组合的,
#include <iostream.h>
void combination(int a[],int size,int n,int b[],int r,int m)
{
if(m==r)
{
for(int i=0;i<m;i++)
cout<<b[i]<<' ';
cout<<endl;
return;
}
else
{
for(int j=n;j<size;j++)
{
b[m]=a[j];
combination(a,size,j+1,b,r,m+1);
}
}
}
void permutation(int a[],int size,int b[],int r,int m,int flag[])
{
if(m==r)
{
for(int i=0;i<m;i++)
cout<<b[i]<<' ';
cout<<endl;
return;
}
else
{
for(int j=0;j<size;j++)
{
if(flag[j]==0)
{
b[m]=a[j];
flag[j]=1;
permutation(a,size,b,r,m+1,flag);
flag[j]=0;
}
}
}
}
void main(void)
{
int a[5]={1,2,3,4,5};
int b[3];
int flag[5]={0};
combination(a,5,0,b,3,0);
permutation(a,5,b,3,0,flag);
}
  • 打赏
  • 举报
回复
熊主任 2004-05-08
找本组合数学的书看看,什么邻位对换法,很多的。
  • 打赏
  • 举报
回复
kbsoft 2004-05-08
http://search.csdn.net/expert/topic/56/5601/2002/5/12/715322.xml
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-08 03:10
社区公告
暂无公告