社区
C语言
帖子详情
关于排列组合方面的问题
kinglonghr
2004-05-08 03:10:57
如何用C语言实现p(M,N)排列 M个数中取N个排序。
C(M,N)组合M个数中取N个组合。
请大家指教谢谢了
...全文
89
4
打赏
收藏
关于排列组合方面的问题
如何用C语言实现p(M,N)排列 M个数中取N个排序。 C(M,N)组合M个数中取N个组合。 请大家指教谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
排列组合
问题
之圆形分布
这时我们每右转一次A,那么上面的6种分布又可以得到新的6种线型分布,但他们和转动前的分布都是
问题
的解(因为他们的相对位置不变,而
问题
给出的条件是相对位置),所以对于圆形分布,即是把线型分布的首位连接成一个圆,圆转动后他们的位置仍然会保持相对不变,那么我们只需要求出A=0,{B,C,D}的线型分布组合起来的解,就可以用来判定题目给出的条件。有一张圆桌,坐了A,B,C,D四个人,已知,D在A的右边,C在D的对面,请问A,B,C,D,的坐次?//{A, B, C, D}对应分布中的{0, 1, 2, 3}
排列组合
问题
模板
目录 前言 一、全排列 二、组合
问题
前言
排列组合
问题
实在暴力枚举的时候经常遇到的
问题
,是搜索技术的基础之一,是我们必须要掌握的算法。 一、全排列 递归求全排列: #include<bits/stdc++.h> using namespace std; int data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int num = 0; void solve(int begin, int end){ if(...
排列组合
问题
排列组合
问题
排列组合
是组合数学里的两大经典
问题
,下面我们先来看一下它的定义: 排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。 组合:一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,(即不考虑顺序),叫作从n个不同元素中取出m个元素的一个组合。 一、全排列
问题
首先我们可以先简化一下这个
问题
,就令n=mn...
排列组合
问题
探索
这里,主要是对经典的
排列组合
问题
进行了总结,并归纳了解决这些
问题
的方法。解决这一类
问题
非常重要的一点是:要会灵活变通,有些新
问题
貌似没见过,但其实就是换了个马甲。 文章目录一、优限法二、捆绑法三、插空法四、间接法五、实战 一、优限法 即 优先法,优先考虑对位置有要求的元素,再考虑余下的元素。 【例】 A、B、C、D、E五个人排队,要求A必须站在队首或队尾,问多少种排列方式? 思路: 先安排A,有A...
问题
D: 【
排列组合
问题
】组合
问题
有一种隐忍其实是蕴藏着的一种力量,有一种静默其实是惊天的告白。 题目描述 邪狼:“老大,听说早操做得好,典狱长会有丰盛的奖励?” 修罗王:“是啊,每人一朵小红花,年底还有奖状发呢。” 邪狼:“……我能请个病假吗?” 现在的
问题
是:每天典狱长要从M个做操的囚犯中选出N个做操做得好的囚犯予以奖励,试求出共有多少种组合方式。 输入 共两个数字,即M,N(20≥M≥N≥0)。 输出 ...
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章