P1157 组合的输出
组合的输出
题目描述
排列与组合是常用的数学方法,其中组合就是从 个元素中抽出 个元素(不分顺序且 ),我们可以简单地将 个元素理解为自然数 ,从中任取 个数。
现要求你输出所有组合。
例如 ,所有组合为:
。
输入格式
一行两个自然数 。
输出格式
所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
注意哦!输出时,每个数字需要 个场宽。以 C++ 为例,你可以使用下列代码:
cout << setw(3) << x;
输出占 个场宽的数 。注意你需要头文件 iomanip
。
样例 #1
样例输入 #1
5 3
样例输出 #1
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
解析
就是搜索,感觉这个搜索挺妙的,直接修改数组,不需要回溯了,搜素到底就将数组中的数依次输出。
代码
#include <bits/stdc++.h> using namespace std; int n, r, a[50]; void dfs(int k) { if (k > r) { for (int i = 1; i <= r; i ++) cout << setw(3) << a[i]; cout << '\n'; return ; } for (int i = a[k - 1] + 1; i <= n; i ++) { a[k] = i;//不需要回溯了 dfs(k + 1); } } int main() { cin >> n >> r; dfs(1); return 0; }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理