計算機學院有n(0<n<10)個學霸,現選優秀畢業生m(0<m<=n)個,因爲沒法選出最優秀的學生,現只能隨機抽取,如今,將這n個學霸按1,2,3...n編號,請給出將得到優秀畢業生的全部組合
ios
輸入:ide
輸入n mspa
輸出:ci
輸出全部優秀畢業生可能的組合,且每一個組合的數值需從大到小降序排列,組合與組合之間需按逆字典序排列it
#include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; int i = n; int* arr = new int[m]; int index = m - 1; int tmp = i; for (int k = 0; k < m; ++k){ arr[k] = tmp--; } for (int j = index; j >= 0; ){ int min = m - j; for (int h = j+1; h < m; ++h){ arr[h] = arr[h - 1]-1; } while (arr[j] >= min && arr[m-1] >= 1){ for (int t = 0; t < m; ++t){ cout << arr[t] << " "; } cout << endl; --arr[m-1]; } if (arr[j] < min){ --j; --arr[j]; } else{ if (arr[j] == min) --j; for (int g = m - 1; g >= 0; --g){ if (arr[g]>m - g){ --arr[g]; j = g; break; } } } } delete[] arr; system("pause"); return 0; }
《完》io