在C 中確定組合可能是一項具有挑戰性的任務,特別是當您正在尋找處理不同輸入值的靈活解決方案時。
解決此問題的一個深思熟慮的方法是使用標準 C 庫中的 next_permutation 函數。此函數增量地產生向量的所有排列。以下是如何利用此函數:
#include <iostream> #include <algorithm> #include <vector> int main() { int n, r; std::cin >> n; std::cin >> r; std::vector<bool> v(n); std::fill(v.end() - r, v.end(), true); do { for (int i = 0; i < n; ++i) { if (v[i]) { std::cout << (i + 1) << " "; } } std::cout << "\n"; } while (std::next_permutation(v.begin(), v.end())); return 0; }
此方法有效地建立一個帶有 r 選擇器值的選擇數組 (v)。隨後,它會迭代此選擇數組的所有排列,並列印所選位置的相應集合成員。
例如,如果您提供輸入「5 2」(S = {1, 2, 3, 4 , 5} 且r = 2),演算法將輸出:
1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5
此方法為在C 中產生組合提供了一種高效且通用的解決方案.
以上是如何在 C 語言中有效率地產生組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!