组合数
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。 输出
- 按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。 样例输入 -
5 3
样例输出 -
543 542 541 532 531 521 432 431 421 321
ac代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a[11];
int v[11];
int n,m;
void dfs(int x)
{
int i,k;
if(x==m)
{
for(k=0;k<m;k++)
printf("%d",a[k]);
printf("\n");
}
else
{
for(i=n;i>=1;i--)
{
if(v[i]!=1)
{
a[x]=i;
v[i]=1;
n=i-1;
dfs(x+1);
v[i]=0;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
dfs(0);
}
return 0;
}
本文详细阐述了如何解决从1到n(n<10)的自然数中选取r(r<=n)个数的所有组合问题,并按照特定顺序输出这些组合。通过深入探讨算法实现细节,提供了一个有效且高效的解决方案。
&spm=1001.2101.3001.5002&articleId=47395493&d=1&t=3&u=def0297d7fe742fd9d7b203467cc0aaa)
2401

被折叠的 条评论
为什么被折叠?



