思想:如何計算字串的下乙個排列了?來考慮"926520"這個字串,
我們從後向前找第一雙相鄰的遞增數字,「20」、"52"都是非遞增的,「26 「即滿足要求,
稱前乙個數字2為替換數,替換數的下標稱為替換點,再從後面找乙個比替換數大的最小數(這個數必然存在)
,0、2都不行,5可以,將5和2交換得到"956220」,然後再將替換點後的字串"6220"顛倒即得到"950226」。
#include#include#includeusing namespace std;
char * findmaxforone(char *p,char *q)
return p2; }
void swap(char *p,char *q)
void reverse(char *p,char *q)
} void print(char *p)
cout
if(s == p) break;
} }int main()
演算法 全排列
從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。用演算法分別實現全排列,其中n個元素儲存在乙個長度為n的陣列中。實現全排列之前,先看一下對進行全排列的一種方法 從圖中可以看出,我們首先從n個元素中取出乙個元...
全排列演算法
1.遞迴全排列 分別將每個位置交換到最前面位,之後全排列剩下的位。遞迴全排列 1 2 3 4 5 1,for迴圈將每個位置的資料交換到第一位 swap 1,1 5 2,按相同的方式全排列剩餘的位 2.字典序全排列演算法 對給定的字符集中的字元規定了乙個先後關係,在此基礎上規定兩個全排列的先後是從左到...
全排列演算法
1.遞迴生成1 n的全排列 示例程式 include using namespacestd void print intn,int a,int cur int main int num while cin num int a 30 print num,a,0 return 0 void print ...