找出从自然数 1、2、... 、n(0<n<10)中任取 r(0<r≤n)个数的所有组合。
输入格式
n,r
输出格式
每个组合从大到小排序
样例输入:
5 3
样例输出:
543
542
541
532
531
521
432
431
421
321
题目分析:
先定义一个数组来存放排好的数,当num减为0时,输出数组,并结束。当num不为0时,用一个递归,递归从n开始,每递归一次,n-1,往数组存放后num-1,dfs完成后再将num+1,以便重新排序
深度优先这个东西,听起来很难,实际上就是很难哈哈哈,
这一段完全就是凑字数的,因为发文助手说我的文章太短辣
我真的很乌语
我也不知道写些什么
就随便写点把
祝我生活与愉快
还有,
ubuntu这个输入法是真的男用,
好容易大错别字阿啊啊啊
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[15]={0};
int n,r;
void dfs(int all,int num)
{
if(num==0)
{
for(int i=0;i<r;i++)
cout<<a[i];
cout<<endl;
return;
}
for(int i=all;i>=1;i--)
{
a[r-num]=i;
num-=1;
dfs(i-1,num);
num+=1;
}
}
int main()
{
cin>>n>>r;
dfs(n,r);
}