題目大意:輸入一個字符串,輸出它的下一個字典序排列。
字典序算法思想:
1.從右向左尋找字符串找出第一個a[i]
2.從右向左找出第一個大於a[j]的元素a[i];
3.swap(a[i],a[j])
4.將a[i]......到a[stelen(a)]倒序
5.輸出a
代碼如下:
#include#include #include #include #include using namespace std; inline void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp; } void Print(int a[],int n){ for(int i=1;i<=n;i++){ printf("%c",a[i]+'0'); if(i==n) cout<<"\n"; } return ; } int main(){ int Dire[100],q; char a[100]; int r,l,n,t; int count=0,c=1; while(scanf("%s",a)&&strcmp(a,"#")!=0){ n=strlen(a);//求出字符串的長度 for(int i=1;i<=n;i++){//初始化待排列的數字串 Dire[i]=a[i-1]-'0'; } int i=n-1; l=0; while(i>0){ if(Dire[i] l;j--){ if(Dire[j]>Dire[l]){ //從右向左找到第一個Dire[j]>Dire[i] r=j; break; //找到第一個Dire[j]時,即跳出循環 } } swap(Dire[l],Dire[r]); //交換Dire[j]>Dire[i] for(int p=l+1,q=n;p