思路: 字典序法中,對于數字1、2、3……n的排列,不同排列的先后關系是從左到右逐個比較對應的數字的先后來決定的。例如對于5個數字的排列 12354和12345,排列12345在前,排列12354在后。按照這樣的規定,5個數字的所有的排列中最前面的是12345,最后面的是 54321 字典序算法如下: 設P是1~n的一個全排列:p=p1p2……pn=p1p2……pj-1pjpj+1……pk-1pkpk+1……pn 1)從排列的右端開始,找出第一個比右邊數字小的數字的序號j(j從左端開始計算),即 j=max{i|pi
#include<iostream>#include<stdio.h>using namespace std;int main(){ int n; cin>>n; int ch[1005]; int i; for(i=1;i<=n;i++) cin>>ch[i]; for(i=n-1;i>=1;i--) { if(ch[i]<ch[i+1]) break; } int min; int count=0; int t; for(int j=i;j<=n;j++) { if(ch[j]>ch[i]) { if(count==0) { min=ch[j]; t=j; count=1; } else { if(min>ch[j]) { min=ch[j]; t=j; } } } } int k; k=ch[i]; ch[i]=ch[t]; ch[t]=k; for(int l=i+1,r=n;l<=(n-i-1)/2+i+1;l++,r--) { int a; a=ch[l]; ch[l]=ch[r]; ch[r]=a; } for(int i=1;i<=n;i++) cout<<ch[i]<<" "; return 0;}新聞熱點
疑難解答