洛谷-P1157 組合的輸出
阿新 • • 發佈:2020-10-08
洛谷-P1157 組合的輸出
題目描述
排列與組合是常用的數學方法,其中組合就是從\(n\)個元素中抽出\(r\)個元素(不分順序且\(r \le n\)),我們可以簡單地將\(n\)個元素理解為自然數\(1,2,…,n\),從中任取\(r\)個數。
現要求你輸出所有組合。
例如\(n=5,r=3\),所有組合為:
\(12 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\)
輸入格式
一行兩個自然數\(n,r(1<n<21,0 \le r \le n)\)。
輸出格式
所有的組合,每一個組合佔一行且其中的元素按由小到大的順序排列,每個元素佔三個字元的位置,所有的組合也按字典順序。
**注意哦!輸出時,每個數字需要\(3\)個場寬,pascal可以這樣:
write(ans:3);
輸入輸出樣例
輸入 #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
C++程式碼
#include <iostream> #include <iomanip> using namespace std; int n, r, a[100]; void dfs(int k) { if (k > r) { for (int i=1; i<=r; ++i) cout << setw(3) << a[i]; cout << endl; 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; }