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 中国語 Web サイトの他の関連記事を参照してください。