C++での辞書式順序の次の順列
ここでは、C++で文字列の辞書式順序で次の順列を生成する方法を説明します。辞書式順序の次の順列は、基本的にはより大きな順列です。たとえば、「ACB」の次は「BAC」になります。 「BBB」や「DCBA」など、辞書式順序で次の順列が存在しない場合もあります。
C ++では、next_permutation()というライブラリ関数を使用してこれを行うことができます。これは、アルゴリズムヘッダーファイルにあります。
例
#include <iostream> #include <algorithm> using namespace std; main() { string s = "DBAC"; for(int i = 0; i<5; i++) { bool val = next_permutation(s.begin(), s.end()); if (val == false) { cout << "No next permutation" << endl; break; } else cout << "Next: " << s << endl; } }
出力
Next: DBCA Next: DCAB Next: DCBA No next permutation
-
C++の醜い数
醜い数は素因数が2、3または5である数です。1から15まで、11の醜い数1、2、3、4、5、6、8、9、10、12、15があります。数7 、11、13は素数であるため、醜いものではありません。素因数で7が来るので、14という数字は醜いものではありません。したがって、10番目の醜い数字を確認したいとします。値は12になります。 アイデアを得るために次のアルゴリズムを見てみましょう- アルゴリズム getUglyNumbers(n) 入力 −用語の数。 出力 −n番目の醜い数字を見つけます。 Begin define array named uglyNum o
-
Pythonでの次の順列
次の順列メソッドを実装したいとします。そのメソッドは、辞書式順序で次に大きい数の順列に数値を再配置します。そのような配置が不可能な場合、このメソッドはそれを可能な限り低い順序として再配置します(つまり、実際には昇順でソートされます)。交換はインプレースで行う必要があり、余分なメモリを使用しないでください。たとえば、入力が左側の列にあり、対応する出力が右側の列にある場合。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 手順を見てみましょう- found:=false、i:=配列の長さ– 2 =0 A [i]