这是一篇洛谷题号P1157题目的题解笔记,该题解的作者是feecle6418
,自己写了一大段程序之后看到这么简洁的方式求组合,感觉还是挺挫败的。关键是,看完了题解还看不太懂......
#include<bits/stdc++.h>
using namespace std;
int r,a[100],n;
void dfs(int k){//搜索第k个数
int i;
if(k>r){
for(i=1;i<=r;i++){
cout<<setw(3)<<a[i];//输出,场宽为三
}
cout<<endl;
return ;//回到前一层
}
for(i=a[k-1]+1;i<=n;i++){
a[k]=i;
dfs(k+1);//直接进行下一次调用
}
}
int main()
{
cin>>n>>r;
dfs(1);
return 0;
}
利用excel表格通过最小数据大致模拟了一下流程,大概搞明白了程序的逻辑,记录一下以备查询: