C语言 简单的数的全排列问题。。。求详解

数的排列问题

Time Limit:1000MS Memory Limit:65536K
Total Submit:16 Accepted:13

Description

输入n,r 统计从1到n,n个数中取r个不同的数有几种取法。要求所取的结果各位不同,且低位数数字大于高位数数字。

Input

一行两个数:n r

Output

所有取法,一行一个r位数

Sample Input

5 3

Sample Output

123 124 125 134 135 145 234 235 245 345

Source

简单dfs枚举即可

#include <stdio.h>
int mark[11];
int n;
int r;
int path[11];
void dfs(int dep,int x)
{
int i;
if(dep==r)
{
for(i=0;i<dep;++i)
{
printf("%d",path[i]);
}
puts("");
return;
}
for(i=x+1;i<=n;++i)
if(!mark[i])
{
mark[i]=1;
path[dep]=i;
dfs(dep+1,i);
mark[i]=0;
}
}
void main()
{
while(scanf("%d%d",&n,&r)!=EOF)
{
int i;
for(i=1;i<=n;++i)mark[i]=0;
dfs(0,0);
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言 全排列问题
主函数定义数组,给子函数2个形参,一个数组,一个计数器,在子函数中初始化数组(循环)。所有的排列可以用循环写。

3道高中排列组合问题 (求详解)
2a,10份礼物分成5组,同样是“均匀分组问题”但是不需要考虑顺序。计算过程:C(10,2)*C(8,2)*C(6,2)*C(4,2)*C(2,2)\/A(5,5)=945。计算解析:C(10,2)*C(8,2)*C(6,2)*C(4,2)*C(2,2)同第一题,除以A(5,5)把顺序除掉了。2b,10个礼物分成两份,...

高二数学.排列.求详解
1、答案:210种。先把七位同学全排列是7*6*5*4*3*2*1种排法,然后因为男同学的派发要求是从左到右按高矮排序,所以男同学之间的顺序就是一种,所以再用原先得到的数据7*6*5*4*3*2*1除以男同学的全排列4*3*2*1,最后结果是210。2、答案:15种 只要先选出四本书作为一组,其他剩下的...

高中数学人教版“排列与组合”不会啊!求详解!
集合A为9个数的全排列,把集合A分为两个集合B、C,集合B中1排在2前面,集合C中1排在2后面。则S(B)+S(C)=S(A)在集合B、C之间建立以下对应关系:集合B中任一元素1和2位置对调形成的数字,对应集合C中相同数字。则这个对应关系为一一对应。因此S(B)=S(C)=9!\/2 以同样的思路可...

相似回答