关于排列组合方面的问题

kinglonghr 2004-05-08 03:10:57
如何用C语言实现p(M,N)排列 M个数中取N个排序。
C(M,N)组合M个数中取N个组合。
请大家指教谢谢了
...全文
52 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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