您的位置:首页 > 其它

nyoj 32 组合数

2013-10-30 15:52 309 查看
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

输入输入n、r。
输出按特定顺序输出所有组合。

特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3


样例输出
543
542
541
532
531
521
432
431
421
321

组合与全排列,排列类似,在排列的情况在再加一个条件,从大到小!

#include <stdio.h>

int s[10] = {0}, a[10];
int j = 0,flag = 0;;

void PaiLie(int k, int n, int m)
{
int i = 0, l;
if((j - 1) == m)
{
for(l = 0; l < m; l++)
{
if(a[l] < a[l + 1])
{
flag = 1;
break;
}
}
if(flag == 0)
{
for(l = 0; l <= m; l++)
printf("%d", a[l]);
printf("\n");
}
flag = 0;
}
else
{
for(i = n; i >= 0; i--)
{
if(s[i] == 0)
{
s[i] = 1;
a[j++] = i + 1;
PaiLie(i, n, m);
j--;
s[i] = 0;
}
else
continue;
}
}
}

int main()
{
int n, m;
scanf("%d%d", &n, &m);
PaiLie(0, n - 1, m - 1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: