フル配列の生成
3044 ワード
「ABCDE」を生成する全配列を例に全配列の生成は、後の数から、「D」<「E」のような第1の適合順序を見つける信号である.処理を開始します.処理方法は、この順序に合致する位置(例えば、‘B’<‘C’)を見つけると、‘C’の後ろ(‘C’を含む文字列を並べて(エントロピー値を復元する))を生成し、左から歩いて、‘B’より大きい文字を最初に見つけると、この2つの文字の位置を交換する.
実は本質的には‘B’より大きい数の中で一番小さいものを出して、それを交換して、順番を並べていますが、このようなアルゴリズムによって、同じ効果を実現しました.これは、このコードが多くの全配列と生成されるのとは異なる場所のコードです.
実は本質的には‘B’より大きい数の中で一番小さいものを出して、それを交換して、順番を並べていますが、このようなアルゴリズムによって、同じ効果を実現しました.これは、このコードが多くの全配列と生成されるのとは異なる場所のコードです.
#include
using namespace std;
// A-E
string s = "ABCDE";
void sort(int start,int end){ // easysort
for (int i = start; i < end; ++i){
for (int j = i + 1; j <= end; ++j){
if (s[i] > s[j]){
char t = s[i];
s[i] = s[j];
s[j] = t;
}
}
}
} //
// ,
void findALittleBigger(int j ,int start){ //end 4
for (int i = start; i <= 4; ++i){
if (s[i] > s[j]){
char t = s[i];
s[i] = s[j];
s[j] = t;
break;
}
}
}
int main(){
cout << s<< endl;
for (int time = 0;time < 119; ++time){// 199
for (int i = 4; i > 0; --i) {
if (s[i] > s[i - 1]){ // , s[i - 1] , s[i-1] s[i - 1]
sort(i, 4);
findALittleBigger(i - 1, i);
break;
}
}
cout << s<< endl;
}
}