從 1~n 這 n 個整數中隨機選出 m 個,輸出全部可能的選擇方案。spa
兩個整數n,m在同一行用空格隔開。code
按照從小到大的順序輸出全部方案,每行1個。blog
首先,同一行內的數升序排列,相鄰兩個數用一個空格隔開。遞歸
其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面(例如1 3 5 7排在1 3 6 8前面)。it
n>0,
0≤m≤n,
n+(n−m)≤25io
5 3
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 <cstdio> const int N = 30; int way[N]; int n, m; void dfs(int u, int start) //u:表示枚舉位置,start:表示枚舉位置的值的最小值 { if (u + n - start < m ) return; //剪枝 if ( u == m + 1) { for (int i = 1; i <= m; i ++) printf("%d ", way[i]); printf("\n"); return; } for (int i = start; i <= n; i ++) { way[u] = i; dfs(u + 1, i + 1); way[u] = 0; } } int main() { scanf("%d %d", &n, &m); dfs(1, 1); return 0; }